webForumDet fria alternativet

JOIN+WHERE+ORDER BY=Krångligt!, Hjälp!

Databaser & SQL

4 svar · 371 visningar · startad av IckoPicko

Medlem sedan jan. 20093 inlägg
Frågan#1

Jag använder denna SQL-sträng för att hämta data från en MySQL-databas, vilket funkar bra. Jag vill dock ha en liten ändring som jag inte lyckas åstadkomma.

SELECT blogs.id, blogs.written_by, blogs.addtime, blogs.title, 
COUNT(blogcomments.id), MAX(blogcomments.addtime), users.icon
FROM blogs
LEFT JOIN blogcomments ON blogs.id = blogcomments.blog_id
LEFT JOIN users ON blogs.written_by = users.username
WHERE UNIX_TIMESTAMP( blogcomments.addtime ) >1231099200
GROUP BY blogs.id
ORDER BY blogs.addtime DESC

Som ni ser så sorteras resultatet efter blogs.addtime, fallande. Jag vill på något sätt sätta en LIMIT vilken tar bort de första 7 raderna som finns i tabellen blogs. Men om jag nu lägger till "LIMIT 7,100000" på slutet så tas de 7 raderna där WHERE-klausulen stämmer bort. Jag vill alltså ta bort de första 7 raderna oavsett om de stämmer in på WHERE-satsen eller inte. Går det att fixa?

Medlem sedan maj 200591 inlägg
#2

Du får göra en subselect som först tar bort de 7 första raderna, och därefter joina och böka med det andra.

Medlem sedan jan. 20093 inlägg
#3

Ok, tack! Det har jag aldrig gjort förr. Har du ett exempel på hur det skulle kunna se ut?

Medlem sedan dec. 20025 483 inlägg
#4
SELECT dt.id, dt.written_by, dt.addtime, dt.title, 
COUNT(blogcomments.id), MAX(blogcomments.addtime), users.icon
FROM (select * from blogs order by addtime desc limit 8, 18446744073709551610) as dt
LEFT JOIN blogcomments ON dt.id = blogcomments.blog_id
LEFT JOIN users ON dt.written_by = users.username
WHERE UNIX_TIMESTAMP( blogcomments.addtime ) >1231099200
GROUP BY dt.id
ORDER BY dt.addtime DESC
Medlem sedan jan. 20093 inlägg
#5

Stort tack för hjälpen! :birp

283 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
154 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
155 ms — ändringar (db)