Avatar billede strunov Nybegynder
31. oktober 2004 - 20:54 Der er 8 kommentarer og
2 løsninger

count over flere tabeller

Hej jeg sidder og skal lave et count over flere tabeller.
Spørgsmålet er, er der nogen der ved om man kan lave ét count, så man kun behøver at lavet et kald til databasen eller skal jeg gøre som nedenfor?

select count(*) from AAA where blocked = 1;
select count(*) from BBB where blocked = 1;
select count(*) from CCC where blocked = 1;
select count(*) from DDD where blocked = 1;

<i>Og ligge dem sammen bagefter</i>

Det er følsomme oplysninger jeg arbejder med, så jeg bringer et lignene eksempel :)
Avatar billede hmortensen Nybegynder
31. oktober 2004 - 21:03 #1
Kan du mon ikke gøre sådan:

SELECT AAA.COUNT(*), BBB.COUNT(*), CCC.COUNT(*), DDD.COUNT(*) FROM AAA, BBB, CCC, DDD WHERE blocked = 1
Avatar billede hmortensen Nybegynder
31. oktober 2004 - 21:03 #2
Og skal de ligges sammen:
SELECT AAA.COUNT(*) + BBB.COUNT(*) + CCC.COUNT(*) + DDD.COUNT(*) FROM AAA, BBB, CCC, DDD WHERE blocked = 1
Avatar billede arne_v Ekspert
31. oktober 2004 - 21:08 #3
(select count(*) from AAA where blocked = 1)
union
(select count(*) from BBB where blocked = 1)
union
(select count(*) from CCC where blocked = 1)
union
(select count(*) from DDD where blocked = 1)

en query som returnerer 4 rækker
Avatar billede majkat Nybegynder
31. oktober 2004 - 21:27 #4
arne_v's løsning skal nok lige have et par tilføjelser:

Du bør bruge UNION ALL, ikke bare UNION - ellers bliver to rækker hvor count er det samme slået sammen til een.

Eller, hvis tabelnavenet det enkelte tal kommer fra betyder noget i det efterfølgende, kan du i stedet bruge

  (select "AAA", count(*) from AAA where blocked = 1)
  union
  (select "BBB", count(*) from BBB where blocked = 1)

osv. Her er ALL ikke nødvendigt, da du med tabelnavnet sikrer at hver række er unik.
Avatar billede hmortensen Nybegynder
31. oktober 2004 - 21:33 #5
Se bare bort fra mit forslag. Den ganger tallene op, så 4 tabeller med 3 rækker i hver, gir 81 resultatter
Avatar billede strunov Nybegynder
31. oktober 2004 - 21:51 #6
så vidt jeg lige kan se, er majkat's løsning den bedste.. men af en eller anden grund, viser den 4 hvergang..

den viser godt nok det rigtige i mysql. men når jeg smider den i php viser den ikke andet end 4.. jeg mistænker lidt at den tager antal tabeller og tæller på på
Avatar billede arne_v Ekspert
31. oktober 2004 - 21:53 #7
Du tæller vel ikke antal rækker i resultset ?
Avatar billede strunov Nybegynder
31. oktober 2004 - 22:11 #8
jo.. jeg fandt problemet :)

arne_v og majkat vil I ikke sende et svar? så vil jeg se om jeg kan dele svar  points mellem jer :)
Avatar billede arne_v Ekspert
31. oktober 2004 - 22:12 #9
ok
Avatar billede majkat Nybegynder
31. oktober 2004 - 22:28 #10
hep!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester