webForumDet fria alternativet
Logga in / Bli medlem

ORDER BY VAD?

Databaser & SQL

6 svar · 339 visningar · startad av slow

Medlem sedan apr. 2004148 inlägg
Trådstart#1

Då var jag här med mitt forum igen.
I forumet har jag så man först kan välja kategori, sedan listas ämnena upp där med blandannat senaste svar. Det jag inte lyckas göra där är att jag vill att ämnenena först ska sorteras efter när dom är insatt. Sedan ifall det finns något svar kopplat till dessa så ska det sorteras efter svarets datum.

Någon som kan hjälpa mig hur jag ska tänka eller vad jag ska söka efter på detta forumet eller i någon manual?

Så här ser min SQL ut nu.

SELECT id_amne, rubrik_amne, datum_amne, namn_amne, MAX(datum_svar)
FROM forum_amne LEFT JOIN forum_svar ON amne_id = id_amne
WHERE kat_id = parameter
GROUP BY id_amne
ORDER BY datum_amne, datum_svar DESC

Det order by som jag använder fungerar alltså inte...

Medlem sedan juni 200032 967 inlägg
#2

Det man alltid ska tänka på är att ange vilken dbms man använder, så slipper vi gissa.

MySQL?

... ORDER BY CASE WHEN datum_svar IS NULL THEN datum_amne ELSE datum_svar END DESC
Medlem sedan apr. 2004148 inlägg
#3

Just ja, slarvigt...men du gissade rätt...mySQL 4.0.22-standard.
Dock så får jag det inte att fungera...
Så här ser det ut nu:

SELECT id_amne, rubrik_amne, datum_amne, namn_amne, datum_svar, MAX(datum_svar), COUNT(id_svar) AS antal
FROM forum_amne LEFT JOIN forum_svar ON amne_id = id_amne
WHERE kat_id = parameter
GROUP BY id_amne
ORDER BY CASE WHEN datum_svar IS NULL
THEN datum_amne ELSE datum_svar END DESC

Ser ni något fel eller är det nått annat fel? :)

Medlem sedan juni 200032 967 inlägg
#4

Alla fält i selectlistan måste ingå i GROUP BY när du använder aggregatfunktioner.

Dessutom: på vilket sätt fungerar det inte? Felmeddelande?

Medlem sedan apr. 2004148 inlägg
#5

hm..vad menar du med att alla fält i selectlistan måste ingå i GROUP BY? Måste det vara så här?
SELECT id_amne, rubrik_amne, datum_amne osv.
GROUP BY id_amne, rubrik_amne, datum_amne osv.

Jag får inget felmeddelande utan den sorterar helt enkelt aldrig efter svarsdatum...

Medlem sedan dec. 200012 464 inlägg
#6
SELECT id_amne, 
rubrik_amne, 
datum_amne, 
namn_amne, 
MAX(coalesce(datum_svar,datum_amne)) as lastDate, 
COUNT(id_svar) AS antal
FROM forum_amne 
LEFT JOIN forum_svar ON amne_id = id_amne
WHERE kat_id = parameter -- ?
GROUP BY id_amne,
rubrik_amne, 
datum_amne, 
namn_amne
ORDER BY lasDate desc
Medlem sedan apr. 2004148 inlägg
#7

Fungerar perfekt!
Enda felet var ORDER BY lasDate.. :D
Med parameter så menar jag en URLparameter som jag skicker med så man vet vilken kategori man ska hämta ämnena ifrån...vet inte om det är ett så smidigt sätt men det fungerar iaf.. :)
Tack så mycket iaf...man lär sig nått varje dag...

278 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)