webForumDet fria alternativet

Räkna antalet poster i flera tabeller

Databaser & SQL

4 svar · 205 visningar · startad av Christophe

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

Hej,

mitt lilla problem är att jag har tre stycken tabeller (nyheter, recensioner, kronikor), som alla ser likadana ut, och jag vill göra en topplista på vem som skrivit flest artiklar. Jag skulle helt enkelt vilja ha ut ett resultat som ser ut så här:

Namn - 55 artiklar
Namn2 - 20 artiklar
...osv

Att plocka ut det ur en tabell har jag löst så här:

SELECT vem, COUNT(vem) AS topp FROM nyheter GROUP BY vem ORDER BY topp DESC

... men lyckas inte klura ut hur jag ska få ut det summerade resultatet av dessa tre tabeller.

Medlem sedan dec. 200012 464 inlägg
#2

Mysql, jaha. Om tabellerna är lika varför har du då tre tabeller? Du skulle kunna lägga allt i samma tabell och lägga till en extra kolumn som anger typ.

Den här typen av frågor blir onödigt komplicerade om du har mysql eftersom man måste göra det i flera steg.

skapa en temporär tabell med en kolumn vem och antal

utför group-by frågan på varje tabell och lagra i temp-tabell.

antingen med union (om du har 4.0) eller med tre separata frågor

utför din group by-fråga på temp-tabellen.

select sum(antal),vem from temp group by vem order by 1 desc

Medlem sedan feb. 20033 inlägg
#3

Toppensnabbt svar. Fanken, det var alltså jobbigt. Självklart är det smidigare med alla i en tabell; alltid lär man sig något. Hur lägger jag enklast samman mina tre tabeller en gång för alla?

Medlem sedan dec. 200012 464 inlägg
#4

Skapa en ny tabell med samma kolumer + typ

lagra gamla värdem


insert into newTable select  nyheter.*,'Nyheter' from nyheter
insert into newTable select  kronikor.*,'Kronikor' from kronikor
insert into newTable select  recensioner.*,'Recensioner' from recensioner
Medlem sedan feb. 20033 inlägg
#5

En får tacka, suveränt!

254 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)