10. juli 2007 - 00:03Der er
13 kommentarer og 1 løsning
Order by last reply
Hej Eksperter,
Jeg vil gerne have have lavet en query som sorterer forum-tråde efter sidste aktivitet.
Jeg har så fået lavet(af en anden) dette: SELECT thread.* FROM thread LEFT JOIN comment ON thread.id=comment .cid WHERE thread.sid=" . $sid . " AND thread.type='article' AND(thread.gkarma/thread.bkarma) > 1.5 AND thread.karmanums > 5 GROUP BY thread.id ORDER BY comment.dated DESC
Det virker også fint, indtil tråden har 1 kommentar, så ryger den ikke op ad listen mere. Dvs. når en tråd med 0 kommentarer bliver kommenteret, ryger den op ad listen, men har den 1 kommentar og bliver kommenteret, bliver den på sin plads.
Og det ville også være rart hvis en helt ny tråd bliver smidt øverst på listen.
Det er fordi, det felt der sorteres på er null, indtil der oprettes en kommentar. Du kan tildele et sådant felt en dummy værdi, f.eks. en fast dato langt ude i fremtiden, NOW(), CURRENT_TIMESTAMP(), UNIX_TIMESTAMP(), eller hvad der nu passer til dit system:
SELECT thread.*, MAX(comment.dated) AS SenesteKommentar FROM thread LEFT JOIN comment ON thread.id=comment .cid WHERE thread.sid=" . $sid . " AND thread.type='article' AND(thread.gkarma/thread.bkarma) > 1.5 AND thread.karmanums > 5 GROUP BY thread.id ORDER BY COALESCE(SenesteKommentar, thread.dated) DESC
Mærkeligt! - men okay, så prøver vi med en nested forespørgsel:
SELECT * FROM ( SELECT thread.*, MAX(comment.dated) AS SenesteKommentar FROM thread LEFT JOIN comment ON thread.id=comment .cid WHERE thread.sid=" . $sid . " AND thread.type='article' AND(thread.gkarma/thread.bkarma) > 1.5 AND thread.karmanums > 5 GROUP BY thread.id ) AS tmp ORDER BY COALESCE(SenesteKommentar, dated) DESC
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.