webForumDet fria alternativet

Avancerad select count?

6 svar · 362 visningar · startad av ConnyFox

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#1

Håller på att bygga ett forum och undrar följande.

hur räknar jag ut hur många trådar som finns totalt i en kategori

och ännu värre, hur räknar jag ut hur många inlägg som finns i alla dessa trådar.

har följande tabellstruktur.

Kategorier
*ID
*namn

Trådar
*ID
*namn
*belongto

Inlägg
*ID
*namn
*belongto

har ingen aning om hur man räknar ut detta i sql frågan. vanlig count kan man ju..

MySQL = "Select namn, count(trådar), count(inlägg) from kategorier"

Vill kunna lista ut alla kategorier såhär sen

Avdelning       Trådar      Svar  

Motorcycklar  15             312
Bilar               12             243
LarsGMedlem sedan dec. 200012 464 inlägg
#2

Flyttas från ASP

MelittaMedlem sedan sep. 2003448 inlägg
#3

MySQL = "Select namn, count(trådar) as antalT, count(inlägg) as antalI from kategorier"

Funkar det inte så då?

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#4

nej det e ju olika tabeller tyvärr där man identifierar vilken kategori tråden hör till med belongto och vilken tråd posten hör till på samma sätt.

så för att räkna ut antal poster totalt i en kategori får man alltså räkna ut antal poster där belongto = id´t på en tråd där belongto = id´t på den kategorin ;D eller åt andra hållet vore nog smidigare.

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#5

Ingen som kan? misstänkte att detta inte skulle gå att lösa med bara sql utan krävde asp för att bygga ihop sql frågan, därför jag postade där men å var det ju någon som flyttade den hit..

BrimbaMedlem sedan dec. 19995 875 inlägg
#6
declare @categories table([id] int identity (1,1), namn varchar(50))
insert into @categories (namn) values ('Motorcyklar')
insert into @categories (namn) values ('Bilar')

declare @threads table([id] int identity (1,1), namn varchar(50), belongto int)
insert into @threads (namn, belongto) values ('Motorcykeltråd 1', 1)
insert into @threads (namn, belongto) values ('Motorcykeltråd 2', 1)
insert into @threads (namn, belongto) values ('Biltråd 1', 2)

declare @posts table([id] int identity (1,1), namn varchar(50), belongto int)
insert into @posts (namn, belongto) values ('Svar på Motorcykeltråd 1', 1)
insert into @posts (namn, belongto) values ('Svar på Motorcykeltråd 1', 1)
insert into @posts (namn, belongto) values ('Svar på Motorcykeltråd 1', 1)
insert into @posts (namn, belongto) values ('Svar på Biltråd 1', 3)
insert into @posts (namn, belongto) values ('Svar på Biltråd 1', 3)
insert into @posts (namn, belongto) values ('Svar på Motorcykeltråd 2', 2)

select 
	t1.Avdelning, sum(t1.Trådar) Trådar, sum(t1.Inlägg) Inlägg
from 
(
	select
		t2.namn Avdelning,
		count(*) Trådar,
		(select count(*) from @posts where belongTo = t3.id) Inlägg 
	from
		@categories t2
		inner join @threads t3 on t2.id = t3.belongTo
	group by
		t2.namn, t2.id, t3.id
) t1
group by
	t1.avdelning

/*
Bilar	1	2
Motorcyklar	2	4
*/
LarsGMedlem sedan dec. 200012 464 inlägg
#7

Eftersom jag flyttade tråden så får jag väl ge ett svar med hjälp av enbart SQL då.

select category,
(select count(*)
 from threads
 where belongto = c.id) as threads,
(select count(*)
 from posts 
  inner join threads on threads.id = posts.belongto
  where threads.belongto = c.id)
from categories c
139 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)