webForumDet fria alternativet

ORDER BY-problem

3 svar · 319 visningar · startad av Andy

AndyMedlem sedan sep. 2001138 inlägg
#1

hej

Har ett enkelt forum som baseras på en SQL 2005 Server-databas med en tabell som ser ut så här, något förenklat:

Tabellnamn: posts
id | int
postdate |datetime
subject | nvarchar
body | text
parentpost_id | int

Trådar och svar på trådar sparas i denna tabell. Svaren kopplas ihop med rätt tråd med hjälp av parentpost_id-fältet.

Jag vill nu lista trådarna sorterade i datumordning, baserat på senaste svaret i tråden, eller om det inte finns något svar på datumet tråden skapades. Men jag får det inte att fungera. Så här ser min SELECT ut:

SELECT p1.postdate, p1.subject,
(SELECT TOP 1 postdate FROM posts p2 WHERE p2.parentpost_id = p1.id ORDER BY postdate DESC) AS replydate
FROM posts p1
WHERE parentpost_id IS NULL
ORDER BY replydate DESC, postdate DESC

Problemet har att göra med att trådar som ännu inte har några svar hamnar sist i resultatet, eftersom replydate är NULL för dessa trådar. Jag vill ju att den skall sortera efter replydate och postdate kombinerat. Någon som förstår vad jag är ute efter, och vad problemet är?

Så här blir sortingen:

postdate | replydate
2007-01-17 | 2007-01-18
2007-01-16 | 2007-01-15
2007-01-21 | NULL <-- Denna tråd har ännu inga svar

Men jag vill att den skall sortera så här:

postdate | replydate
2007-01-21 | NULL
2007-01-17 | 2007-01-18
2007-01-16 | 2007-01-15

@ndersMedlem sedan juni 200032 969 inlägg
#2
... ORDER BY COALESCE(replydate, postdate) DESC

mvh

AndyMedlem sedan sep. 2001138 inlägg
#3

Tack!

Peter SMedlem sedan dec. 20025 483 inlägg
135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)