Heej,

zit met een probleempje.. Het gaat om 3 tabellen, users, factories, casinos.
User heeft column id die primary is, en factories en casinos hebben allebei een column owner die naar users.id verwijst.

De relatie van users.id en factories.owner is een één op veel relatie. Een gebruiker kan meerdere factories hebben. Zelfde geldt voor casinos.

Nu wil ik alle kolommen uit users hebben en daarbij per gebruiker hoeveel casinos en factories hij heeft.

ik had zoiets:


SELECT users.*, COUNT(casinos.id), COUNT(factories.id) FROM users 
LEFT JOIN casinos ON casinos.owner = users.id
LEFT JOIN factories ON factories.owner = users.id
GROUP BY users.id


Nu heeft gebruiker met id 1, 36 factories en 12 casinos. En de fout is dat COUND(casinos.id) en COUNT(factories.id) beide 432 bevatten ( 36 * 12 ). Hoe los ik dit op.

Alvast bedankt
AS count1 en AS count2 doen mischien?

GR. mebus
zelfde verhaal, toch bedankt
Het zit hem in de GROUP BY. Mysql doet eigenlijk maar wat.

En wat jij vraagt is ook niet te groeperen. Vraag eerst maar eens een lijstje van wat je wilt hebben in plaats van user.*
Hoe bedoel je een lijstje opstellen,


SELECT users.username, COUNT(casinos.id) AS count1, COUNT(bullet_factories.id) AS count2 FROM users 
LEFT JOIN casinos ON casinos.owner = users.id
LEFT JOIN bullet_factories ON bullet_factories.owner = users.id
GROUP BY users.id


als je dit bedoeld, weer die 432.
Ja dat bedoel ik. Hieruit blijkt ook precies dat mysql geen idee heeft wat GROUP BY betekend.
Jij groepeert op user.id terwijl je die niet eens vraagt.

SELECT users.id, users.username DE REST.......
GROUP BY users.id, COUNT(casinos.id),COUNT(bullet_factories.id)

Probeer dat eens. Dat zou in ORACLE de juiste manier va n groeperen zijn.
Dan krijg ik deze error:

Invalid use of group function
Nou dan weet ik het ook niet. Sorry
Gewoon twee queries gebruiken, anders raakt GROUP BY in de war.
Deze gaat prima:

SELECT e.naam, COUNT( f.id ) AS aantalfabrieken
FROM eigenaars AS e, fabrieken AS f
WHERE e.id = f.eigenaar_id
GROUP BY e.naam

pas die ook toe op het aantal casino's
@Jan dat is een foutje in mysql neem ik aan?
Het kan trouwens wel met een UNION, in 1 query:
(
SELECT e.naam, COUNT( f.id ) AS aantal
FROM eigenaars AS e, fabrieken AS f
WHERE e.id = f.eigenaar_id
GROUP BY e.naam
)
UNION (
SELECT e.naam, COUNT( c.id ) AS aantal
FROM eigenaars AS e, casinos AS c
WHERE e.id = c.eigenaar_id
GROUP BY e.naam
)
ORDER BY naam ASC

Reageren