Avatar billede zurekk Nybegynder
10. juli 2007 - 00:03 Der 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.

Hvad gør jeg?

På forhånd tak.
Avatar billede kjulius Novice
10. juli 2007 - 13:45 #1
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:

ORDER BY COALESCE(comment.dated, NOW()) DESC
Avatar billede kjulius Novice
10. juli 2007 - 13:49 #2
Alternativt (og måske mere logisk?) kunne du sortere på thread-datoen, hvis der ikke findes en kommentar:

ORDER BY COALESCE(comment.dated, thread.dated) DESC
Avatar billede zurekk Nybegynder
10. juli 2007 - 15:06 #3
Ja den smider den nyeste op øverst på listen, men det får stadig ikke tråde som har kommentarer til ryge op når de bliver kommenterert igen.
Avatar billede kjulius Novice
10. juli 2007 - 16:03 #4
Hmmm...

Hvad så med

ORDER BY COALESCE(MAX(comment.dated), thread.dated) DESC
Avatar billede zurekk Nybegynder
10. juli 2007 - 16:08 #5
Så får jeg denne fejl:
"Invalid use of group function"
Avatar billede kjulius Novice
10. juli 2007 - 16:36 #6
Okay, så prøv

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
Avatar billede zurekk Nybegynder
10. juli 2007 - 17:00 #7
#1054 - Unknown column 'SenesteKommentar' in 'order clause'

=/

comment.dated er en datetime row hvis det betyder noget?
Avatar billede kjulius Novice
10. juli 2007 - 17:43 #8
Du har husket at tilføje feltet øverst, i SELECT'en, ikke?
Avatar billede zurekk Nybegynder
10. juli 2007 - 17:44 #9
Jo.. Præcist som du skrev.
Avatar billede kjulius Novice
10. juli 2007 - 17:48 #10
Hmm... Det lyder mærkeligt. Samme stavemåde, og det hele?
Avatar billede zurekk Nybegynder
10. juli 2007 - 17:56 #11
yes sir..
Kopierede den og smed det i.
Avatar billede kjulius Novice
10. juli 2007 - 17:59 #12
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
Avatar billede zurekk Nybegynder
10. juli 2007 - 18:10 #13
Det virker perfekt, tusind tak, smid et svar :D
Avatar billede kjulius Novice
10. juli 2007 - 18:44 #14
Godt! :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester