Toon posts:

[mySQL] Select uit meerdere tabellen.

Pagina: 1
Acties:
  • 151 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb hier laatst een topic geplaatst over een mySQL query, dat leek toen te werken maar er blijkt achteraf toch nog een probleempje te zijn. Ik heb een forums, topics en posts table en ik wil een select doen uit alle drie de tables.

Ik wil alle forums opvragen en bij elk forum moet het nieuwste topic ID worden opgevraagd en van dat nieuwste topic ID moet dan weer de nieuwste post ID worden opgevraagd.

Dit zijn de tables en de query die ik nu gebruik:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
CREATE TABLE forums
(
    forumID INT AUTO_INCREMENT PRIMARY KEY
)

CREATE TABLE topics
(
    topicID INT AUTO_INCREMENT PRIMARY KEY
    forumID INT,
)
CREATE TABLE posts
(
    postID  INT AUTO_INCREMENT PRIMARY KEY
    topicID INT,
)


SELECT
    forums.forumID AS Forum,
    MAX(topics.topicID) AS Topic,
    MAX(posts.postID) AS Post
FROM
    forums,
    topics,
    posts
WHERE
    topics.forumID = forums.forumID
AND
    posts.topicID = topics.topicID
GROUP BY
    forums.forumID


Dit werkt aardig maar in sommige situaties krijg ik niet de juiste post ID terug. Het forum ID en topic ID zijn wel altijd correct. Als het nodig mocht zijn kan ik de inhoud van de tabellen wel posten om te kijken wat er fout gaat.

  • Shagura
  • Registratie: Augustus 2001
  • Laatst online: 21-08 16:57
Wat bedoel je precies met 'niet de juiste id'? Ik zou het handig vinden als je een voorbleed zou kunnen geven...

edit:
ik kan dus niet lezen

[ Voor 38% gewijzigd door Shagura op 23-01-2003 20:34 ]


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Waar plaats je eigenlijk de eerste posting in een topic? (dus de eigenlijke posting).
ook is het misschien aan te raden een LIMIT icm een order by te gebruiken ipv MAX()

[ Voor 67% gewijzigd door DeverauX op 23-01-2003 20:37 ]

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • Sjab-X
  • Registratie: September 2001
  • Laatst online: 06-08 11:45
Volgens mij is dit een probleem dat wel vaker naar voren is gekomen bij MySQL. Ik neem aan dat er meerdere topics per forum zijn en meerder posts per topic. Je groepeerd nu op forum, dus krijg je maximaal het aantal regels terug als fora er zijn. De MAX werkt dan volgens mij niet, omdat er eerst maar 1 regel geselecteerd wordt.

Misschien leg ik het een beetje krom uit, misschien klopt het niet wat ik zeg, maar ik heb zoiets ook gehad bij een soort van active topic pagina...
(en wat dan wel de oplossing is... ik weet het niet ;))

Verwijderd

Topicstarter
devraux schreef op 23 januari 2003 @ 20:36:
Waar plaats je eigenlijk de eerste posting in een topic? (dus de eigenlijke posting).
ook is het misschien aan te raden een LIMIT icm een order by te gebruiken ipv MAX()
Ook gewoon in de posts tabel. De post met het laagste ID is de eerste. Hoe zou ik dat dan kunnen combineren, want ik heb al aardig wat geprobeerd met die statements ORDER BY en LIMIT.
Sjab-X schreef op 23 januari 2003 @ 20:39:
Volgens mij is dit een probleem dat wel vaker naar voren is gekomen bij MySQL. Ik neem aan dat er meerdere topics per forum zijn en meerder posts per topic. Je groepeerd nu op forum, dus krijg je maximaal het aantal regels terug als fora er zijn. De MAX werkt dan volgens mij niet, omdat er eerst maar 1 regel geselecteerd wordt.
Er zijn uiteraard meerdere topics en meerdere posts :P. En waarom zou de MAX niet werken? Hij werkt wel voor het topic ID, maar niet goed voor het post ID.

Ik weet dat het een vrij kromme uitleg is, maar ik kan het eigenlijk niet anders uitleggen.

  • momania
  • Registratie: Mei 2000
  • Laatst online: 14:32

momania

iPhone 30! Bam!

Probeer em ook eens te groupen by topicID...

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Topicstarter
Dan krijg ik per forum 3 (oid) rows :|.

[ Voor 9% gewijzigd door Verwijderd op 23-01-2003 20:58 ]


  • momania
  • Registratie: Mei 2000
  • Laatst online: 14:32

momania

iPhone 30! Bam!

Of zet je group by eens op topics.forumID en eventueel op posts.topicID.
De group by op forum.forumID heeft eigenlijk geen zin omdat dat allemaal unieke records zijn.

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Topicstarter
Wanneer ik de GROUP BY op topics.topicID zet dan klopt de uitkomst idd. Alleen dan heb je nog het probleem dat je voor 3 forums 26 rows krijgt.

topics.forumID werkt echter niet goed...

posts.topicID werkt ook goed btw echter weer teveel rows.

[ Voor 33% gewijzigd door Verwijderd op 23-01-2003 21:08 ]


  • momania
  • Registratie: Mei 2000
  • Laatst online: 14:32

momania

iPhone 30! Bam!

heb je ook een gelijktijdige groep by gedaan?
Dus:

GROUP BY
topics.forumID AND
posts.topicID

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Topicstarter
Nu wel, maar dan krijg ik slecht 1 row terug en ook nog eens verkeerde values.

Verwijderd

Ik veronderstel dat je alle forumID's wil met daarnaast de meest recente topic en post in dat topic. Probleem is dat je dat niet met een GROUP BY kan doen omdat de GROUP BY je niet toelaat om op voorhand te sorteren en in dit geval wordt het grootste postID geselecteerd tov het forum en niet de topic.

Ik heb jammergenoeg niet meteen een oplossing in gedachten die je met 1 query kan uitvoeren. Als je subselects kon doen in mysql zou je eerst de meest recente post per forum kunnen opvragen en dan daarop selecteren.

[ Voor 15% gewijzigd door Verwijderd op 23-01-2003 21:19 ]


  • momania
  • Registratie: Mei 2000
  • Laatst online: 14:32

momania

iPhone 30! Bam!

Verwijderd schreef op 23 January 2003 @ 21:13:
Nu wel, maar dan krijg ik slecht 1 row terug en ook nog eens verkeerde values.
1 row :? vaag...

post eens wat data....

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Topicstarter
Je hebt helemaal goed. Hij selecteerd idd het posts.postID waar het posts.topicID = forums.forumID. Ik had nog niet gezien dat het postID afhankelijk was van het forumID.

Alleen nu nog de oplossing ;(.

Verwijderd

Topicstarter
Hier een screenie van de inhoud.

a = forum
b = topic
c = post

Afbeeldingslocatie: http://www.theforumisdown.com/uploadfiles/1102/aIsForum.jpg Afbeeldingslocatie: http://www.theforumisdown.com/uploadfiles/1102/bIsTopic.jpg Afbeeldingslocatie: http://www.theforumisdown.com/uploadfiles/1102/cIsPost.jpg

Edit: Krijg ik zo'n vreselijk irritante dutchtone koffer in mijn scherm 8)7 :( !

[ Voor 14% gewijzigd door Verwijderd op 23-01-2003 21:28 ]


  • momania
  • Registratie: Mei 2000
  • Laatst online: 14:32

momania

iPhone 30! Bam!

[edit]
laat maar, klopte voor geen kant... 8)7

[ Voor 143% gewijzigd door momania op 23-01-2003 22:08 ]

Neem je whisky mee, is het te weinig... *zucht*

Pagina: 1