[sql] probleem met join

Pagina: 1
Acties:

  • Mark Wegener
  • Registratie: December 2001
  • Laatst online: 17-05 23:56
hallo,

ik 3 tabellen in mysql: thread, post en user. waarbij user geen invloed heeft op mijn probleem. thread bestaat uit thread info en post uit post info (duh).

ik wil een lijst van alle threads van 1 forum, en daarbij wil ik inhoud van de eerste post selecteren. daarvoor heb ik de volgende sql regel opgesteld:

code:
1
2
3
4
5
6
7
8
9
10
11
SELECT t.threadid, t.title, t.replycount, t.dateline,
       LEFT(p.pagetext, 500) AS pagetext, u.username
thread AS t
LEFT JOIN post AS p
  ON (t.threadid = p.threadid)
LEFT JOIN user AS u
  ON (u.userid = p.userid)
WHERE t.forumid = 51
GROUP BY t.threadid
ORDER BY t.dateline DESC
LIMIT 20


ik dacht dat hij altijd wel de eerste post van de thread zou nemen omdat die -natuurlijk- als eerste in de tabel is te vinden. soms doet hij het goed en soms niet. dus hoe los ik dit op, of is het onmogelijk in 1 query?

bedankt!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
Waarom denk je de eerste post als eerste in de tabel te vinden is?

Wat bedoel je met 'goed' en 'niet goed'. Wat gaat er precies fout?

https://fgheysels.github.io/


  • Mark Wegener
  • Registratie: December 2001
  • Laatst online: 17-05 23:56
goed: dat hij de 1e post van de thread pakt.
fout: als hij niet de 1e post van de thread pakt.

dus geen errors ofzo.

ik denk dat omdat de tweede er pas later in de tabel komt (zo is dus het ID van de 2e hoger dan de 1e post)

Verwijderd

weet niet of je subquerys mag gebruiken (vanaf 4.0.nog wat)_

maar misschien dat dit beter werkt:

code:
1
2
3
4
5
6
7
8
9
10
11
SELECT t.threadid, t.title, t.replycount, t.dateline,
       LEFT(p.pagetext, 500) AS pagetext, u.username
thread AS t
LEFT JOIN post AS p
  ON (t.threadid = p.threadid)
LEFT JOIN user AS u
  ON (u.userid = p.userid)
WHERE t.forumid = 51 and
 p.postid in (select min(postid), threadid from post group by threadid)
ORDER BY t.dateline DESC
LIMIT 20

  • Mark Wegener
  • Registratie: December 2001
  • Laatst online: 17-05 23:56
subqueries werken pas vanaf 4.1, en ik heb 4.0.16 dus dat werkt helaas niet :(

Verwijderd

Dan kun je het ook bereiken met meerdere query's.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Als je er simpelweg voor zorgt dat de startpost van een topic altijd dezelfde timestamp heeft als het topic zelf kun je dit wel in 1 query oplossen :) Anders wordt het inderdaad neuzelen met meer queries (waarbij het opspliten van iruoy's versie nogal inefficient is, die group by is niet nodig).

Professionele website nodig?


  • Mark Wegener
  • Registratie: December 2001
  • Laatst online: 17-05 23:56
curry684 schreef op 26 juni 2004 @ 04:27:
Als je er simpelweg voor zorgt dat de startpost van een topic altijd dezelfde timestamp heeft als het topic zelf kun je dit wel in 1 query oplossen :) Anders wordt het inderdaad neuzelen met meer queries (waarbij het opspliten van iruoy's versie nogal inefficient is, die group by is niet nodig).
Indeed, that's it!

stom dat ik daar niet aan heb gedacht, iig, het volgende heb ik nu als oplossing.

WHERE (t.dateline = p.dateline OR ((p.dateline - t.dateline) < 5)) AND t.forumid = 51
Pagina: 1