NL: 3x Victron Multiplus II 5000VA, 1x Victron SmartSolar MPPT RS 450/200, 50kWh (3x Yixiang v2 met EVE MB30's) | IT: Deye SUN-15K-SG01HP3-EU-AM2, Deye BOS-G50 Pro (51,2kWh HV)
Verwijderd
Is die users.groep geen Foreign Key trouwens...?
Zo dus
1
| SELECT COUNT(a.id) AS aantal, b.groep FROM users a LEFT JOIN groep b ON a.groep = b.id GROUP BY groep ORDER BY aantal DESC; |
[ Voor 60% gewijzigd door Verwijderd op 03-04-2006 16:18 ]
dus
1
2
| SELECT veld FROM tabel1 a LEFT JOIN tabel2 b ON a.id = b.id |
[ Voor 3% gewijzigd door Dido op 03-04-2006 16:19 ]
Hmh, ik ben niet bekend met Foreign keys, zal er eens naar gaan kijken (mijn SQL is een klein beetje rusty).Verwijderd schreef op maandag 03 april 2006 @ 16:17:
Met een leftjoin
Is die users.groep geen Foreign Key trouwens...?
Zo dus
SQL:
1 SELECT COUNT(a.id) AS aantal, b.groep FROM users a LEFT JOIN groep b ON a.groep = b.id GROUP BY groep ORDER BY aantal DESC;
Overigens, code net even getest, krijg helaas nog geen 0 groepen erbij
/edit:
Met een RIGHT JOIN werkt ie wel
[ Voor 5% gewijzigd door OverSoft op 03-04-2006 16:23 ]
NL: 3x Victron Multiplus II 5000VA, 1x Victron SmartSolar MPPT RS 450/200, 50kWh (3x Yixiang v2 met EVE MB30's) | IT: Deye SUN-15K-SG01HP3-EU-AM2, Deye BOS-G50 Pro (51,2kWh HV)
Het hoeft niet, maar zelf heb ik een voorkeur om zo mogelijk alleen left joins te gebruiken (en dan dud in jouw geval de tabellen om te draaien) om e.e.a. overzichtelijk te houden.
Er is trouwens ook nog de full (outer) join, dan krijg je alles uit beide tabellen, en als het matched komt het op dezelfde regel.
Dan krijg je dus ook het aantal users dat nog niet in een groep zit, in dit geval.
[ Voor 22% gewijzigd door Dido op 03-04-2006 16:30 ]
NL: 3x Victron Multiplus II 5000VA, 1x Victron SmartSolar MPPT RS 450/200, 50kWh (3x Yixiang v2 met EVE MB30's) | IT: Deye SUN-15K-SG01HP3-EU-AM2, Deye BOS-G50 Pro (51,2kWh HV)
[ Voor 4% gewijzigd door NMe op 03-04-2006 18:47 ]
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
/edit:
Ik stuit toch op een klein probleempje.
Als ik namelijk een WHERE clause toevoeg (als in "users.enabled=1") krijg ik helaas de lege groepen niet terug. Ik heb dit op het moment op een smerige manier opgelost (namelijk SUM(users.enabled) i.p.v. COUNT(users.id)), maar dit moet toch anders te doen zijn?
[ Voor 38% gewijzigd door OverSoft op 03-04-2006 19:23 ]
NL: 3x Victron Multiplus II 5000VA, 1x Victron SmartSolar MPPT RS 450/200, 50kWh (3x Yixiang v2 met EVE MB30's) | IT: Deye SUN-15K-SG01HP3-EU-AM2, Deye BOS-G50 Pro (51,2kWh HV)
[ Voor 5% gewijzigd door Annie op 03-04-2006 20:54 ]
Today's subliminal thought is:
YES, thank youAnnie schreef op maandag 03 april 2006 @ 20:53:
Je moet niet vergeten dat een lege groep geen users heeft en dus voor die rijen ook geen users.enabled = 1 kan gelden (je krijgt null's terug voor niet matchende rijen). De check zou dus moeten zijn WHERE (users.enabled = 1 OR users.enabled IS NULL)
Bedankt allemaal
NL: 3x Victron Multiplus II 5000VA, 1x Victron SmartSolar MPPT RS 450/200, 50kWh (3x Yixiang v2 met EVE MB30's) | IT: Deye SUN-15K-SG01HP3-EU-AM2, Deye BOS-G50 Pro (51,2kWh HV)
1
2
3
4
5
6
7
| SELECT COUNT(a.id) AS aantal, b.groep FROM groep b LEFT JOIN users a ON a.groep = b.id AND a.enabled = 1 GROUP BY groep ORDER BY aantal DESC; |
Dan zouden als het goed is alleen de users die bij een groep horen en tegelijk enabled zijn worden meegenomen in de join. Bovendien kun je zo nog iets meer optimaliseren, omdat je je index op twee kolommen kunt leggen.
Fat Pizza's pizza, they are big and they are cheezy