webForumDet fria alternativet

ORDER BY VAD?

6 svar · 339 visningar · startad av slow

slowMedlem sedan apr. 2004148 inlägg
#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...

@ndersMedlem sedan juni 200032 969 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
slowMedlem 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? :)

@ndersMedlem sedan juni 200032 969 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?

slowMedlem 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...

LarsGMedlem 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
slowMedlem 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...

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)