Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按类别查询产品计数时出错_Php_Mysql - Fatal编程技术网

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
对于无法使用
内部联接来实现所需结果的原因,有一个很好的解释