webForumDet fria alternativet

Forum join

Databaser & SQL

5 svar · 792 visningar · startad av Aram

Medlem sedan mars 20105 inlägg
Frågan#1

Hej alla!
Har lite problem med att plocka ut de senaste inlägget från tråden.
Några ideer? :P

SELECT p.subject, p.creator, p.date, x.username, x.fdate, ifnull(x.answers, 0) as answers

FROM forum_threads p

LEFT JOIN(SELECT id_thread, username, fdate, count(*) as answers FROM forum_reply

GROUP BY id_thread order by fdate DESC)
x on p.tid = x.id_thread where id_category = '1'
order by fdate ASC
Medlem sedan aug. 20039 340 inlägg
#2

Det vanligaste sättet att lösa detta problem är att helt sonika ha kolumner för tiden och id't för det senaste inlägget i trådtabellen, och uppdatera dessa när nya inlägg görs i tråden. Det är både enklast och bäst ur prestanda-synvinkel.

Medlem sedan mars 20105 inlägg
#3

nitro2k01 skrev:

Det vanligaste sättet att lösa detta problem är att helt sonika ha kolumner för tiden och id't för det senaste inlägget i trådtabellen, och uppdatera dessa när nya inlägg görs i tråden. Det är både enklast och bäst ur prestanda-synvinkel.

hmm :birp.. är det kanske bättre och skippa joins helt och hållet? hur är det med count grejen? drar det mycket prestanda?

Medlem sedan dec. 20025 483 inlägg
#4

Vad är det som inte fungerar? En sak är att du inte petar in tråd-id:t någonstans.

Så länge tabellerna joinas på indexerade kolumner är det inga problem. Primär- och sekundärnycklar, och kolumner som är UNIQUE indexeras som regel automatiskt. I flera fall kan det dock vara gynnsamt att spara beräkningar i egna fält, som nitro är inne på.

Ja, Count(*) kan vara jobbig om villkoren som ställs är komplicerade; dbms måste ju faktiskt räkna varje rad som uppfyller villkoren.

Hur stora tabeller talar vi om?

Medlem sedan mars 20105 inlägg
#5

hmm

Peter S skrev:

Vad är det som inte fungerar? En sak är att du inte petar in tråd-id:t någonstans.

Så länge tabellerna joinas på indexerade kolumner är det inga problem. Primär- och sekundärnycklar, och kolumner som är UNIQUE indexeras som regel automatiskt. I flera fall kan det dock vara gynnsamt att spara beräkningar i egna fält, som nitro är inne på.

Ja, Count(*) kan vara jobbig om villkoren som ställs är komplicerade; dbms måste ju faktiskt räkna varje rad som uppfyller villkoren.

Hur stora tabeller talar vi om?

Hmm det är ett forum som skall likna vbulletin..
Har ingen aning om hur många poster det kommer att vara.
Bättre och köra på nitro2k01 lösning

Medlem sedan mars 20105 inlägg
#6

....

273 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)