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.
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
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.
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