webForumDet fria alternativet

Räkna antal svar i forum

Databaser & SQL

3 svar · 233 visningar · startad av NETwork

Medlem sedan juni 20011 732 inlägg
Frågan#1

Jag har gjort ett forum som bygger på två tabeller. Det fungerar fint, men jag har inte lyckats klura ut hur jag ska göra för att räkna antal svar i en tråd.

Tabellerna ser ut så här

Forum:
- ForumID
- Topic
- Name
- Date

Thread:
- ThreadID
- ForumID
- Name
- Message
- Date

När jag fyller förstasidan på forumet så behöver jag alltså på något sätt hämta hur många ThreadID det finns i tabellen Thread för varje ForumID. Har förstått att man ska göra en join men fattar inte riktigt hur.

Nån som kan hjälpa mig?

------------------
Jag kan inte komma på någon signatur.

Medlem sedan dec. 200012 464 inlägg
#2
select count(threadid) as antal, topic from forum f left outer join thread t on f.forumid = t.forumid group by topic

------------------
essentitia preter non sans multiplicandum

Medlem sedan juni 20011 732 inlägg
#3

Tack! Om du orkar så får du väldigt gärna förklara lite hur det fungerar. :)

count(threadid) as antal

Här räknar du alla threadid och lägger värdet i variabeln (säger man variabel i sql?) "antal", eller? Alltså det totala antalet inlägg i hela forumet?

forum f

Du byter bara namn på forum till f?

forum f left outer join thread t on f.forumid = t.forumid group by topic

Här hängde jag inte med riktigt... vad gör en left outer join? Och hur lagras antal svar för varje tråd?

------------------
Jag kan inte komma på någon signatur.

Medlem sedan dec. 200012 464 inlägg
#4

count(threadid) as antal

Det här är bara för att namnge fältet, så man kan inte tala om en variabel i detta sammanhang.

forum f

ja, namnbytet är mest en bekvämlighet. I vissa fall, om man har samma tabell flera gånger, så måste man använda denna teknik för att kunna särskilja olika instanser.

forum f left outer join thread t on f.forumid = t.forumid group by topic

en left outer join innebär att man tar med alla poster i den vänstra tabellen oavsett om det finns ett matchande värde i tabellen thread eller inte. Om det inte finns någon match så blir de kolumner som skulle hämtats från tabellen thread ersatta med null. Det är därför jag använder columnnamnet i count ovan.

count(columnnamn) innebär att man inte tar med de värden som är null i räkningen. På så sätt blir det 0 på de ämnen som inte har något svar.

------------------
essentitia preter non sans multiplicandum

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