webForumDet fria alternativet

Forum - hämta senaste trådar (så optimerat det bara går)

Databaser & SQL

0 svar · 519 visningar · startad av Ekström

Medlem sedan feb. 20022 594 inlägg
Frågan#1

Hejs.

Har ett problem jag bara inte lyckas lösa, och även om jag skulle lyckas lösa det skulle jag känna mig väldigt osäker då optimering av SQL inte tillhör mina styrkor. :)

Vad jag lyckats få till hittills är följande (den visar dock inte trådar utan svar, vilket ju känns ganska grundläggande för att få igång någon aktivitet :)) :

SELECT f1.*
, f3.id
, f3.topic, f3.views
, u1.username
, u2.username as poster
FROM (SELECT thread_id       
       , MAX(created_at) lastpost
       , COUNT(*)-1 AS replycount
       FROM forumposts
       GROUP BY thread_id
) f1
LEFT JOIN forumposts f2
ON f1.thread_id = f2.thread_id
AND f1.lastpost = f2.created_at
JOIN forumposts f3
ON f1.thread_id = f3.id 
JOIN users u1
ON u1.id = f2.user_id
JOIN users u2
ON u2.id = f3.user_id
WHERE f3.forum_id = 1

DBMS är mysql och målet är alltså att hämta ut de trådar ordnade efter created_at. Trådar och svar ligger i samma tabell. Svaren har thread_id som är trådens id. Fick tipset att sätta denna till id på trådarna, då detta skulle förenkla frågan.

Att köra frågan så optimerat som möjligt vore inte helt fel då forumet ligger på en VPS med väldigt begränsad prestanda.

Jättetacksam för hjälp!

253 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)