webForumDet fria alternativet

Problem med limitliknande i MSSQL

Databaser & SQL

1 svar · 281 visningar · startad av Kristianstad

Medlem sedan dec. 2002841 inlägg
Frågan#1

(ursakta for att de svenska tecknena uteblir)

Jag forsoker skapa en fraga i MSSQL likt MYSQL;s limit 10,10.
HuvudID / ForumID
111 / 1
222 / 2
111 / 3
888 / 4
777 / 5
666 / 6
333 / 7
222 / 8
222 / 9
555 / 10
444 / 11
999 / 12

Jag vill att HuvudID ska grupperas och det ska vara 4 traffar per sida. Sidorna ska da alltsa bli:

SIDA1
HuvudID / ForumID
999 / 12
444 / 11
555 / 10
222 / 9

SIDA2
HuvudID / ForumID
333 / 7
666 / 6
777 / 5
888 / 4

Denna kod funkar nastan:

SELECT TOP 4 MAX(n.Forumnamn), Max(Datum), MAX(f.ForumID), MAX(Rubrik), MAX(HuvudID), COUNT(*)-1, MAX(f.Forumnamn)
FROM forum f JOIN Forumkategori n ON n.ForumID=f.Forumnamn
WHERE f.ForumID NOT IN (SELECT TOP 4 ForumID FROM forum ORDER BY ForumID DESC) GROUP BY HuvudID
ORDER BY 2 DESC

Denna kod utesluter inte ForumID nummer 8 utan inkluderar den i bade sida 1 och 2 vilket jag inte vill. Har ni nagot tips pa losning?

Medlem sedan dec. 19996 721 inlägg
#2

Du måste ha samma sortering på den inre och den yttre frågan för att det ska fungera. Jag är inte riktigt med på din struktur och varför du behöver alla MAX:ar, men detta skulle kunna fungera

SELECT TOP 4 MAX(n.Forumnamn), Max(Datum), MAX(f.ForumID), MAX(Rubrik), MAX(HuvudID), COUNT(*)-1, MAX(f.Forumnamn)
FROM 
(SELECT TOP 4 * FROM Forum WHERE ForumID NOT IN (SELECT TOP 4 ForumID FROM forum ORDER BY ForumID DESC) ORDER BY ForumID DESC) f JOIN Forumkategori n ON n.ForumID=f.Forumnamn
GROUP BY HuvudID
ORDER BY 2 DESC
271 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)