zwei Tabellen zusammen mit der Anzahl der Datensätze aus der zweiten Tabelle basierend auf der Bedingung @ verbind
Ich habe folgende Tabellen -
Hier ist SQLFIDDLE
Kategorie
+-----------+-------------+
| column | type |
+-----------+-------------+
| id | int(11) |
| name | varchar(40) |
| unit | varchar(50) |
| is_active | tinyint(1) |
+-----------+-------------+
un
Produkt
+-------------+---------------+
| column | type |
+-------------+---------------+
| id | int(11) |
| category_id | int(11) |
| name | varchar(40) |
| base_rate | decimal(10,2) |
| is_active | tinyint(1) |
+-------------+---------------+
Ich möchte eine Liste der Kategorien zusammen mit der Anzahl der aktiven Produkte erhalten. Wenn für eine Kategorie keine Produkte aktiv sind, sollte 0 zurückgegeben werden.
Etwas wie Tabelle unten -
+----+--------+--------------+
| id | name | active_count |
+----+--------+--------------+
| 1 | Steel | 1 |
| 2 | Cement | 2 |
+----+--------+--------------+
Ich habe folgende Frage gestellt -
SELECT c.id, c.name, c.unit, COUNT(p.category_id) as active_count
FROM `categories` c
JOIN `products` p
ON c.id = p.category_id
WHERE ( p.is_active = 1 )
GROUP BY p.category_id;
Dieses überquery funktioniert nur, wenn mindestens ein Produkt aktiv ist in jeder Kategorie. Wenn keine Produkte verfügbar sind, sollte @ zurückgegeben werdeactive_count
wie0
Wie kann ich das beheben?
Hier ist SQLFIDDLE