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
Klaasjan Boven schreef op 16.10.2006 22:16
@Jan dat is een foutje in mysql neem ik aan?

Weet ik niet zeker; je vraagt aan MySQL om per naam te groeperen op twee COUNTS, dus dat lijkt me moeilijk. Die UNION die ik net postte, lijkt me een handiger oplossing. Je moet dan wel bedenken dat je eerst het aantal fabrieken krijgt, en dan het aantal casino's.
@Jan: ja dat werkt ook wel, maar het lijkt me zo overbodig.. Het moet toch kunnen zou je zeggen.

Maar ja als het echt niet anders kan dan moet het maar

EDIT: zie nu pas union, daar mee gaat het. Dank
Oké, graag gedaan.
Heb nog even wat geprobeerd en dit werkt wat beter,


SELECT t.*, COUNT(bullet_factories.id)  FROM (SELECT users.* , COUNT(casinos.id) FROM users 
LEFT JOIN casinos ON casinos.owner = users.id
GROUP by casinos.owner) AS t
LEFT JOIN bullet_factories ON bullet_factories.owner = t.id
GROUP BY bullet_factories.owner


Voor de mensen die ooit hetzelfde probleem hebben

Reageren