Jo, det vet jag ju. Men det ska bäddas in i min kod.
AnswerCount ska följa med "SELECT * FROM tblForum WHERE AnswerTo IS NULL ORDER BY PostId DESC" så att jag kan få fram det enkelt för varje tråd sen.
"SELECT *, AnswerCount(SELECT count(*) AS AnswerCount FROM tblForum WHERE AnswerTo = PostId) FROM tblForum WHERE AnswerTo IS NULL ORDER BY PostId DESC"
"SELECT *, AnswerCount(SELECT count(*) FROM tblForum WHERE AnswerTo = m.PostId) AS AnswerCount FROM tblForum m WHERE AnswerTo IS NULL ORDER BY PostId DESC"
Nu vet jag inte om den här koden är så korrekt så rätta gärna mig!
"SELECT *, (SELECT count(*) FROM tblForum WHERE AnswerTo = m.PostId) AS AnswerCount, (SELECT MAX(PostDate) FROM tblForum WHERE AnswerTo = m.PostId) AS LatestAnswerDate, (SELECT TOP 1 Name FROM tblForum WHERE AnswerTo = m.PostId ORDER BY PostId DESC) AS LatestAnswerName FROM tblForum m WHERE AnswerTo IS NULL ORDER BY PostId DESC"
Säg gärna till om det är något fel med den.
Sen så skulle jag behöva göra så att LatestAnswerDate blir samma som m.PostDate om det inte finns några svar.
"SELECT *, (SELECT count(*) FROM tblForum WHERE AnswerTo = m.PostId) AS AnswerCount,[b]coalesce((SELECT MAX(PostDate) FROM tblForum WHERE AnswerTo = m.PostId),m.postDate)[/b] AS LatestAnswerDate, (SELECT TOP 1 Name FROM tblForum WHERE AnswerTo = m.PostId ORDER BY PostId DESC) AS LatestAnswerName FROM tblForum m WHERE AnswerTo IS NULL ORDER BY PostId DESC"
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Odefinierad funktion 'coalesce' i uttryck.
/forum/test.asp, line 8
Du kan ju testa så här, osäker om Access stöder det.
"SELECT *, (SELECT count(*) FROM tblForum WHERE AnswerTo = m.PostId) AS AnswerCount,(SELECT iif(MAX(PostDate) is null,m.postdate,max(postdate)) FROM tblForum WHERE AnswerTo = m.PostId) AS LatestAnswerDate, (SELECT TOP 1 Name FROM tblForum WHERE AnswerTo = m.PostId ORDER BY PostId DESC) AS LatestAnswerName FROM tblForum m WHERE AnswerTo IS NULL ORDER BY PostId DESC"
Jag använder det "på jobbet". Hemma använder jag Access.
Det funkar för mig, men jag kan inte sortera efter det.
sql = "SELECT *, (SELECT count(*) FROM tblForum WHERE AnswerTo = m.PostId) AS AnswerCount, (SELECT iif(MAX(PostDate) is null,m.postdate,max(postdate)) FROM tblForum WHERE AnswerTo = m.PostId) AS LatestAnswerDate, (SELECT TOP 1 Name FROM tblForum WHERE AnswerTo = m.PostId ORDER BY PostId DESC) AS LatestAnswerName FROM tblForum m WHERE AnswerTo IS NULL ORDER BY LatestAnswerDate DESC"
Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][Drivrutin för ODBC Microsoft Access] För få parametrar angavs. 1 förväntades.
/forum/test.asp, line 8
så använder man det ordningsnummer som LatestAnswerDate har i kolumnlistan och använder det i order by. I och med att du skriver select *, ... så vet jag inte vilket ordningsnummer det blir.
Det funkar, men trådar med 0 svar hamnar längst upp och sorteras separat.
Har skrivit så här:
"SELECT *, (SELECT count(*) FROM tblForum WHERE AnswerTo = m.PostId) AS AnswerCount, (SELECT iif(MAX(PostDate) is null,m.postdate,max(postdate)) FROM tblForum WHERE AnswerTo = m.PostId) AS LatestAnswerDate, (SELECT TOP 1 Name FROM tblForum WHERE AnswerTo = m.PostId ORDER BY PostId DESC) AS LatestAnswerName FROM tblForum m WHERE AnswerTo IS NULL ORDER BY 9 DESC"