Php 按类别查询产品计数时出错
类别表Php 按类别查询产品计数时出错,php,mysql,Php,Mysql,类别表 +----+------+ | id | name | +----+------+ | 1 | cat1 | | 2 | cat2 | | 3 | cat3 | +----+------+ 产品表 +----+-------+--------+ | id | name | cat_id | +----+-------+--------+ | 1 | prod1 | 1 | | 2 | prod2 | 1 | | 3 | p
+----+------+
| id | name |
+----+------+
| 1 | cat1 |
| 2 | cat2 |
| 3 | cat3 |
+----+------+
产品表
+----+-------+--------+
| id | name | cat_id |
+----+-------+--------+
| 1 | prod1 | 1 |
| 2 | prod2 | 1 |
| 3 | prod3 | 3 |
| 4 | prod4 | 1 |
| 5 | prod5 | 3 |
| 6 | prod6 | 1 |
+----+-------+--------+
这是我的疑问:
SELECT c.id, c.name, count( p.cat_id ) num
FROM categories c
INNER JOIN products p ON c.id = p.cat_id
GROUP BY p.cat_id
这是一个结果:
+----+------+-------+
| id | name | count |
+----+------+-------+
| 1 | cat1 | 4 |
| 3 | cat3 | 2 |
+----+------+-------+
+----+------+-------+
| id | name | count |
+----+------+-------+
| 1 | cat1 | 4 |
| 2 | cat2 | 0 |
| 3 | cat3 | 2 |
+----+------+-------+
错误现在显示计数cat=2
如何修复以获得此结果:
+----+------+-------+
| id | name | count |
+----+------+-------+
| 1 | cat1 | 4 |
| 3 | cat3 | 2 |
+----+------+-------+
+----+------+-------+
| id | name | count |
+----+------+-------+
| 1 | cat1 | 4 |
| 2 | cat2 | 0 |
| 3 | cat3 | 2 |
+----+------+-------+
这里的完整示例:我认为,您只需将连接更改为左连接
SELECT c.id, c.name, count( p.cat_id ) num
FROM categories c
LEFT JOIN products p ON c.id = p.cat_id
GROUP BY p.cat_id
我想,你只要把你的连接改成左连接就行了
SELECT c.id, c.name, count( p.cat_id ) num
FROM categories c
LEFT JOIN products p ON c.id = p.cat_id
GROUP BY p.cat_id
您需要使用
left join
SELECT c.id, c.name, count( p.cat_id ) num
FROM categories c
LEFT JOIN products p ON c.id = p.cat_id
GROUP BY p.cat_id
ref:您需要使用
左连接
SELECT c.id, c.name, count( p.cat_id ) num
FROM categories c
LEFT JOIN products p ON c.id = p.cat_id
GROUP BY p.cat_id
参考:每个答案都是正确的,您需要使用
左连接来获得指定的结果。要获得您要求的确切结果,您需要执行以下操作:
SELECT c.id, c.name, COUNT(p.cat_id) AS `count`
FROM categories AS c
LEFT JOIN products AS p ON c.id = p.cat_id
GROUP BY p.cat_id
ORDER BY c.id ASC
对于无法使用内部联接来实现所需结果的原因,有一个很好的解释。每个答案都是正确的,您需要使用左联接来实现指定的结果。要获得您要求的确切结果,您需要执行以下操作:
SELECT c.id, c.name, COUNT(p.cat_id) AS `count`
FROM categories AS c
LEFT JOIN products AS p ON c.id = p.cat_id
GROUP BY p.cat_id
ORDER BY c.id ASC
对于无法使用内部联接来实现所需结果的原因,有一个很好的解释