Webstatt.org - Community seit 2006 - 2012 (2024?)

sotierung im forum

Avatar user-279
14.08.2006 06: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 - user-279.

Avatar user-253
14.08.2006 07: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.

Avatar user-279
14.08.2006 08: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"zwinkern..

Avatar user-253
14.08.2006 08:34

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

Avatar user-279
14.08.2006 10:28

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

Avatar user-317
14.08.2006 10: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."";
?>

Avatar user-279
14.08.2006 11: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 `boardcomments`.post_id nicht ein schlüsselfeld ist? oder kann man auf ein beliebiges feld joinen?

Avatar user-317
14.08.2006 11:10

Mh, schau dir mal das hier an : Klick

Avatar user-279
14.08.2006 11:48

ich hab das manual zu join's schonmal angeschaut lächeln

das problem war dass in beiden tabellen die spalte `post_id` 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)

user-210
14.08.2006 11: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 zwinkern

Sie haben soeben die Position Ihres Mauszeigers auf dem Monitor verändert. Bitte starten sie Windows neu damit die Änderungen wirksam werden.
Avatar user-279
14.08.2006 11:56

gute sache lächeln - ich überlegs mir mal. danke.

Avatar user-253
14.08.2006 12:08

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

Avatar user-279
14.08.2006 12:28

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

so long