Willkommen in der Webstatt
User-1 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 - xyz-169.

netcup.de Warum gibt es hier Werbung?
User-2 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.

User-1 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")..

User-2 am 14.08.06 10:34

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

User-1 am 14.08.06 12:28

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

User-3 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."";
?>

User-1 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?

User-3 am 14.08.06 13:10

Mh, schau dir mal das hier an : Klick

User-1 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)

User-4 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 ;)

User-1 am 14.08.06 13:56

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

User-2 am 14.08.06 14:08

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

User-1 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