Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
Mysql SQL“COUNT”没有返回我期望的结果,并且以某种方式将结果限制为一行_Mysql_Sql_Count - Fatal编程技术网

Mysql SQL“COUNT”没有返回我期望的结果,并且以某种方式将结果限制为一行

Mysql SQL“COUNT”没有返回我期望的结果,并且以某种方式将结果限制为一行,mysql,sql,count,Mysql,Sql,Count,一些背景:“图像”是一张“照片”的一部分,可能是零张或多张“图库”的一部分。我的桌子: “快照”表: +----+--------------+ | id | name | +----+--------------+ | 1 | Test shoot | | 2 | Another test | | 3 | Final test | +----+--------------+ “图像”表: +----+-------------------+-----------

一些背景:“图像”是一张“照片”的一部分,可能是零张或多张“图库”的一部分。我的桌子:

“快照”表:

+----+--------------+
| id | name         |
+----+--------------+
|  1 | Test shoot   |
|  2 | Another test |
|  3 | Final test   |
+----+--------------+
“图像”表:

+----+-------------------+------------------+
| id | original_filename | storage_location |
+----+-------------------+------------------+
|  1 | test.jpg          | store/test.jpg   |
|  2 | test.jpg          | store/test.jpg   |
|  3 | test.jpg          | store/test.jpg   |
+----+-------------------+------------------+
+----------+----------+
| shoot_id | image_id |
+----------+----------+
|        1 |        1 |
|        1 |        2 |
|        3 |        3 |
+----------+----------+
+------------+----------+
| gallery_id | image_id |
+------------+----------+
|        1   |        1 |
|        1   |        2 |
|        2   |        3 |
|        3   |        1 |
|        4   |        1 |
+------------+----------+
“拍摄图像”表:

+----+-------------------+------------------+
| id | original_filename | storage_location |
+----+-------------------+------------------+
|  1 | test.jpg          | store/test.jpg   |
|  2 | test.jpg          | store/test.jpg   |
|  3 | test.jpg          | store/test.jpg   |
+----+-------------------+------------------+
+----------+----------+
| shoot_id | image_id |
+----------+----------+
|        1 |        1 |
|        1 |        2 |
|        3 |        3 |
+----------+----------+
+------------+----------+
| gallery_id | image_id |
+------------+----------+
|        1   |        1 |
|        1   |        2 |
|        2   |        3 |
|        3   |        1 |
|        4   |        1 |
+------------+----------+
“画廊图片”表:

+----+-------------------+------------------+
| id | original_filename | storage_location |
+----+-------------------+------------------+
|  1 | test.jpg          | store/test.jpg   |
|  2 | test.jpg          | store/test.jpg   |
|  3 | test.jpg          | store/test.jpg   |
+----+-------------------+------------------+
+----------+----------+
| shoot_id | image_id |
+----------+----------+
|        1 |        1 |
|        1 |        2 |
|        3 |        3 |
+----------+----------+
+------------+----------+
| gallery_id | image_id |
+------------+----------+
|        1   |        1 |
|        1   |        2 |
|        2   |        3 |
|        3   |        1 |
|        4   |        1 |
+------------+----------+
我想要得到的是什么,所以我可以说‘对于这张照片,总共有X张图片,这些图片在Y画廊中展示:

+----+--------------+-------------+---------------+
| id | name         | image_count | gallery_count |
+----+--------------+-------------+---------------+
|  3 | Final test   |           1 |             1 |
|  2 | Another test |           0 |             0 |
|  1 | Test shoot   |           2 |             4 |
+----+--------------+-------------+---------------+
我目前正在尝试下面的SQL,它似乎工作正常,但只返回一行。我搞不懂为什么会这样。奇怪的是,即使“shoots”为空,下面的代码也会返回一行

选择shoots.id, 我的名字, COUNTDISTINCT shot\u images.image\u id作为图像计数, COUNTDISTINCT gallery\u images.gallery\u id作为gallery\u计数 发梢 左连接快照上的快照图片。id=快照图片。快照id 在shoot\u images上左键加入gallery\u images。image\u id=gallery\u images.image\u id 按订单号。id描述
感谢您花时间查看此内容:

您应该查看MySQL函数group by。

您应该查看MySQL函数group by。

您缺少group by子句:

注意:SQL标准允许为GROUPBY指定列名或列号,因此GROUPBY 1,2在本例中相当于GROUPBY SHOTTS.id,SHOTTS.name。有很多人认为这种糟糕的编码实践和主张总是使用列名,但我发现它使代码更可读和可维护,而且我一直写SQL,因为在这个网站上的许多用户诞生之前,它从来没有给我一个问题,使用这种语法。 仅供参考,您之前获取一行而没有获取和出错的原因是,在mysql中,与我所知道的任何其他数据库不同,在使用聚合函数时,允许您省略group by子句。在这种情况下,mysql不会抛出语法异常,而是为每个非聚合列的唯一组合返回第一行

虽然一开始这对SQL纯粹主义者来说似乎令人厌恶,但它却非常方便

您缺少GROUP BY子句:

注意:SQL标准允许为GROUPBY指定列名或列号,因此GROUPBY 1,2在本例中相当于GROUPBY SHOTTS.id,SHOTTS.name。有很多人认为这种糟糕的编码实践和主张总是使用列名,但我发现它使代码更可读和可维护,而且我一直写SQL,因为在这个网站上的许多用户诞生之前,它从来没有给我一个问题,使用这种语法。 仅供参考,您之前获取一行而没有获取和出错的原因是,在mysql中,与我所知道的任何其他数据库不同,在使用聚合函数时,允许您省略group by子句。在这种情况下,mysql不会抛出语法异常,而是为每个非聚合列的唯一组合返回第一行


虽然一开始这对SQL纯粹主义者来说似乎令人厌恶,但它却非常方便

谢谢-这真的很有帮助,既是一个快速修复,也是一个彻底的解释。现在,我将通读这个小组的内容,以便在上下文中完全理解它。谢谢-这真的很有帮助,既可以作为一个快速解决方案,也可以作为一个彻底的解释。现在我将通读这个小组的内容,以便在上下文中完全理解它。