webForumDet fria alternativet

Forum join

5 svar · 792 visningar · startad av Aram

AramMedlem sedan mars 20105 inlägg
#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
nitro2k01Medlem sedan aug. 20037 630 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.

AramMedlem 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?

Peter SMedlem sedan dec. 20025 484 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?

AramMedlem 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

AramMedlem sedan mars 20105 inlägg
#6

....

Genererad på 379 ms · cache AV · v20260730165559-full.f96bc7eb