Avatar billede taub Nybegynder
03. marts 2005 - 22:40 Der er 10 kommentarer og
1 løsning

Problem med flere counts i en select

Hej... Jeg har problemer med min staement, som gerne skulle returnere to felter, som hver er et count fra to forskellige tabeller...

Min statement:

SELECT COUNT(Table1.ID) AS a, COUNT(Table2.ID) AS b FROM Table1, Table2

I felt a står der 14, og i felt b står der også 14.

Det burde være 7 i a, og 2 i b

Hjælp!

Jeg kører med MySQL 3.23.55
Avatar billede arne_v Ekspert
03. marts 2005 - 22:42 #1
Du kan ikke gøre det på den måde.

Den kombinerer alle rækker i Table1 med alle rækker i Table2.

I MySQL 4.x kunne du splejse to SELECT sammen med en UNION.

I MySQL 3.x bliver du nødt til at lave 2 selvstændige SELECT.
Avatar billede taub Nybegynder
03. marts 2005 - 22:55 #2
Christ... Jeg ville helst have undgået at lave mere end en tur til databasen :-(

Jeg mener at have læst noget med at gemme resultaterne i en temp-tabel engang, men det var en and, eller?
Avatar billede arne_v Ekspert
03. marts 2005 - 22:57 #3
Man kan lave meget med temporære tabeller.

Men en temporær tabel er mange gange langsommere end en ekstra roundtrip til
databasen.
Avatar billede taub Nybegynder
03. marts 2005 - 23:00 #4
Okay, men lad os nu sige at jeg skal bruge 4-5 counts på en gang...
Ville det så være bedre at lave 4-5 roundtrips, eller bruge en temp tabel?
Avatar billede taub Nybegynder
03. marts 2005 - 23:01 #5
Eller hvor mange counts skal jeg bruge før det kan betale sig med en temp tabel?
Avatar billede arne_v Ekspert
03. marts 2005 - 23:30 #6
Det ved jeg ikke. Mange.

Men kan du lave en løsning med en temporær tabel uden at lave N+1 roundtrips ?
Avatar billede kjulius Novice
04. marts 2005 - 16:07 #7
Jeg kender ikke ret meget til MySQL, men i nogle dataser kan man lave en SQL som denne

SELECT SELECT COUNT(*) AS a, (SELECT COUNT(*) FROM tabel2) AS b, (SELECT COUNT(*) FROM tabel3) as c
FROM tabel1


En anden mulighed er noget lignende det du havde som udgangspunkt, men med en DISTINCT count (tæller antal forskellige værdier, og da ID sikkert er et autonummereringsfelt skulle der være gode chancer for, at du vil få antal rows):
SELECT COUNT(DISTINCT Table1.ID) AS a, COUNT(DISTINCT Table2.ID) AS b FROM Table1, Table2

Igen, jeg ved ikke om det er noget MySQL understøtter, og hvilke versioner der evt. gør det.
Avatar billede arne_v Ekspert
04. marts 2005 - 16:43 #8
Ikke i MySQL 3.23.55
Avatar billede arne_v Ekspert
04. marts 2005 - 16:43 #9
Altså den første.

Den sidste var værd at prøve.
Avatar billede taub Nybegynder
08. marts 2005 - 15:37 #10
SELECT COUNT(DISTINCT Table1.ID) AS a, COUNT(DISTINCT Table2.ID) AS b FROM Table1, Table2 virker!

Smid et svar kjulius. Tak for hjælpen til jer begge :)
Avatar billede kjulius Novice
10. marts 2005 - 17:21 #11
Med glæde!...
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