Willkommen in der Webstatt Zum Webstatt Blog und Stories
phore phore am 14.08.06 08:06

hallo.

ich habe ein kleines forum gecodet, da habe ich eine tabelle für die themen, und eine für die beiträge. jetzt möchte ich dass die themen "nach letztem beitrag" sortiert werden...

wie mach ich das am besten? muss ich ein join machen und nach beitrag_id sortieren?


danke - phore.

netcup.de Warum gibt es hier Werbung?
Michael Michael am 14.08.06 09:46

Morgen,

ohne es hier prüfen zu können, reicht ein LEFT JOIN wohl nicht aus, da es für jeden Thread ja sehr viele Beiträge geben kann.

Intuitiv würde ich einen LEFT JOIN machen, nach der Thread ID gruppieren und mit HAVING MAX() in der Gruppierung den letzten Post auswählen.

phore phore am 14.08.06 10:14

ok - mein select sieht jetzt so aus..

$selPosts = "SELECT
`post_id`,
`user_id`,
`titel`,
`boardcomments`.post_id,
`boardcomments`.comment_id
FROM
`boardposts`
LEFT JOIN
`boardcomments`
ON
`boardposts`.post_id = `boardcomments`.post_id
GROUP BY
`post_id`
HAVING MAX(`boardcomments`.comment_Id)
DESC
LIMIT
".$limitvalue.", ".$limit."";


funzt aber nicht..("supplied argument is not a valid MySQL result")..

Michael Michael am 14.08.06 10:34

Vor DESC muss in jedem Fall in ORDER BY
Ansonsten kann ich es mir leider nicht genauer anschauen

phore phore am 14.08.06 12:28

jo das order by + desc hab ich jetzt mal rausgenommen.
hm - weiss vielleicht sonst jemand weiter?

Sven Sven am 14.08.06 12:32

So evtl. ?

<?php
$selPosts = "SELECT
`post_id`,
`user_id`,
`titel`,
`boardcomments.post_id`,
`boardcomments.comment_id`
FROM
`boardposts`
LEFT JOIN
`boardcomments`
ON
`boardposts.post_id` = `boardcomments.post_id`
GROUP BY
`post_id`
HAVING MAX(`boardcomments.comment_Id`)
LIMIT
".$limitvalue.", ".$limit."";
?>

phore phore am 14.08.06 13:08

nein - das `tabellenname`.feldname ist schon richtig - habs in einem anderen script genauso.

ich hab das select jetzt nur auf das join gekürzt zum testen, und nichtmal so funzt es, kann es daran liegen dass[FONT=courier new] `boardcomments`.post_id[/FONT] nicht ein schlüsselfeld ist? oder kann man auf ein beliebiges feld joinen?

Sven Sven am 14.08.06 13:10

Mh, schau dir mal das hier an : Klick

phore phore am 14.08.06 13:48

ich hab das manual zu join's schonmal angeschaut :)

das problem war dass in beiden tabellen die spalte [FONT=courier new]`post_id`[/FONT] vorkam - ich musst überall die tabellenpräfix vorne anfügen.

jetzt geht das SELECT mit dem JOIN bis auf die zeile mit dem HAVING MAX:

GROUP BY `boardposts`.post_id HAVING MAX(`boardcomments`.comment_id)

Julian am 14.08.06 13:52

Ich sitze gerade auch an einer "Forensoftware", bzw. ich programmiere gerade an einer Clanpage inkl. Forum. Daher habe ich mir das Prinzip von diversen Foren angesehen.
Meistens ist in der Tabelle Themen/Threads (oder wie auch immer) eine extra Spalte für "lastpost". Das erspart dir die Abfrage einer anderen Tabelle (Beiträge/Posts u.ä.), geht daher auch ein wenig flotter und ist auch einfacher umzusetzen ;)

phore phore am 14.08.06 13:56

gute sache :) - ich überlegs mir mal. danke.

Michael Michael am 14.08.06 14:08

Und MySQL5 kann sogar TRIGGER mit denen man das schön automatisch machen könnte =)

phore phore am 14.08.06 14:28

danke nochmals an alle - habs jetzt mit der zusätzlichen spalte gelöst und das funktioniert ganz gut.

so long

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt