Avatar billede horizon Nybegynder
09. oktober 2008 - 19:13 Der er 21 kommentarer og
1 løsning

select count fra to forskellige tabeller?

Jeg har lidt et problem med min statistikfunktion til et site.

Kan man ikke sige SELECT COUNT(`a.*`) AS `antalAlbum`, COUNT(`b.*`) AS `antalBilleder` FROM a.Albums, b.Billeder?


Jeg får en tilbagemelding der hedder "SELECT command denied to user... for table 'Album' Er det fordi min host har spærret for dette eller er det fordi det ikke er en gyldig forespørgsel?

Ved godt man kan splitte det op i to queries, men er det ikke bedst at lave så få queries som muligt? eller er det mig der har en forkert opfattelse?
Avatar billede majbom Novice
09. oktober 2008 - 19:45 #1
jeg synes den ser underlig ud den query, men prøv med:

"SELECT COUNT(`a.*`) AS `antalAlbum`, COUNT(`b.*`) AS `antalBilleder` FROM Albums AS a, Billeder AS b"

jeg har ingen ide om det virker...
Avatar billede horizon Nybegynder
09. oktober 2008 - 19:54 #2
desværre:

MySQL returnerede: 

#1054 - Unknown column 'a.*' in 'field list'
Avatar billede majbom Novice
09. oktober 2008 - 19:56 #3
kan du så ikke bare:

"SELECT COUNT(`Albums.*`) AS `antalAlbum`, COUNT(`Billeder.*`) AS `antalBilleder` FROM Albums, Billeder"

?
Avatar billede horizon Nybegynder
09. oktober 2008 - 19:58 #4
MySQL returnerede: 

#1054 - Unknown column 'Albums.*' in 'field list'
Avatar billede majbom Novice
09. oktober 2008 - 19:59 #5
"SELECT COUNT(`Albums.id`) AS `antalAlbum`, COUNT(`Billeder.id`) AS `antalBilleder` FROM Albums, Billeder"

evt.
Avatar billede horizon Nybegynder
09. oktober 2008 - 19:59 #6
ville den heller ikke... laver to queries lige foreløbigt, men det kunne være meget rart hvis jeg fandt ud af om det kan lade sig gøre
Avatar billede hmortensen Nybegynder
09. oktober 2008 - 20:04 #7
Måske sådan her:
"SELECT (SELECT COUNT(*) FROM Albums) AS antalAlbum, (SELECT COUNT(*) FROM Billeder) AS antalBilleder"
Avatar billede majbom Novice
09. oktober 2008 - 20:06 #8
"SELECT COUNT(DISTINCT Albums.id), COUNT(DISTINCT Billeder.id) FROM Albums, Billeder"
Avatar billede horizon Nybegynder
09. oktober 2008 - 20:17 #9
Tak til hrmortensen det virkede jo helt som det skulle.

->splazz den outputter kun 1 i hvert felt.

smid et svar hrmortensen
Avatar billede majbom Novice
09. oktober 2008 - 20:21 #10
damn, nu havde jeg ellers så mange forslag :)
Avatar billede horizon Nybegynder
09. oktober 2008 - 20:23 #11
hehe ;-)
Avatar billede hmortensen Nybegynder
09. oktober 2008 - 20:26 #12
Det var så lidt :)
Avatar billede j4k0b Nybegynder
09. oktober 2008 - 21:34 #13
jeg tror grunden til at du får "denied to user" på din egen SQL er, at du forsøger at selecte fra tabellerne 'Albums' og 'Billeder' i databaserne 'a' og 'b' - hvilket du nok ikke har privileger til. Det har splazz så rettet til, men man kan ikke selecte fra mere end én tabel med mindre det er i et JOIN, eller som hrmortensen foreslår, i en eller flere subqueries
Avatar billede j4k0b Nybegynder
09. oktober 2008 - 21:36 #14
Vær opmærksom på, at tiden du har sparet på at lave subqueries er super minimal, i forhold til at lave 2 queries... det er dog en pænere løsning :)
Avatar billede hmortensen Nybegynder
09. oktober 2008 - 23:18 #15
Min løsning er to forespørgelser som blot bliver samlet i en, så intet sparret på SQL siden, men en del på applikationssiden.
Avatar billede dkfire Nybegynder
10. oktober 2008 - 14:02 #16
Jeg tror der er overset en hel ordinær fejl.
SQL returnere: #1054 - Unknown column 'Albums.*' in 'field list'
hvilket er helt korrekt, da du i din sql har skrevet `Albums.*`, og mysql behandler det som èt kolonne navn.
Du kunne prøve at slette ` fra din originale sql-sætning.
Du skal i hvert fald aldrig have ` rundt om både tabel og felt navne når de er sammen. Dvs `tabel.felt`er bestemt ikke det samme som tabel.felt
Avatar billede hmortensen Nybegynder
10. oktober 2008 - 20:40 #17
Korrekt, så skal det være `tabel`.`felt`

Men det vil ikke virke alligevel efter hensigten med flg. query, som faktisk kan køres (bemærk tabel.felt, i stedet for tabel.*):
"SELECT COUNT(a.id) AS antalAlbum, COUNT(b.id) AS antalBilleder FROM Albums AS a, Billeder AS b"

Hvis der er 10 albums poster, og 5 billeder poster, vil begge COUNT's give 50, fordi alle muligheder køres igennem.
Avatar billede horizon Nybegynder
10. oktober 2008 - 23:22 #18
Jeg prøvede lige at ændre den til:

SELECT COUNT( a.ID_ALBUM ) AS albums, COUNT( b.ID_BILLEDE ) AS billeder
FROM a.Albums, b.Billeder

og får en #1142 - SELECT command denied to user ...
Avatar billede dkfire Nybegynder
11. oktober 2008 - 10:53 #19
Det skyldes jo at du IKKE skriver tabellerne rigtig. Prøv nu at gøre det inden du forsøger noget, du kan jo kigge efter hvordan hmortensen har gjort.
Avatar billede horizon Nybegynder
11. oktober 2008 - 13:33 #20
direkte copy/paste af:
SELECT COUNT(a.id) AS antalAlbum, COUNT(b.id) AS antalBilleder FROM Albums AS a, Billeder AS b

gav:

#1054 - Unknown column 'a.id' in 'field list'
Avatar billede dkfire Nybegynder
11. oktober 2008 - 13:45 #21
Ja men det skyldes jo nok, som den også siger, at du ikke har et felt i tabellen Albums.
Avatar billede hmortensen Nybegynder
11. oktober 2008 - 22:25 #22
Men det er spild af tid at få til at virke, da det som sagt giver et "forkert" resultat.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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