14

嗨,想知道是否有人可以对以下错误有所了解。sql 在本地工作正常,但我远程收到以下错误。

SQL查询:

   SELECT COUNT(node.nid), 
          node.nid AS nid, 
          node_data_field_update_date.field_update_date_value AS node_data_field_update_date_field_update_date_value
     FROM node node
LEFT JOIN content_type_update node_data_field_update_date ON node.vid = node_data_field_update_date.vid
    WHERE node.type IN ('update')
ORDER BY node_data_field_update_date_field_update_date_value DESC

MySQL 说:

#1140 - 如果没有 GROUP BY 子句,混合 GROUP 列 (MIN(),MAX(),COUNT(),...) 与没有 GROUP 列是非法的

4

7 回答 7

14

您的服务器可能开启了ONLY_FULL_GROUP_BY 。您可以将其关闭或将每个选定的字段添加到分组依据。

于 2009-12-06T03:27:54.627 回答
11

使用聚合函数的单个列有效而不使用聚合函数的列的版本不起作用的原因是您需要指定一个GROUP BY子句。您的查询应如下所示:

   SELECT COUNT(n.nid), 
          n.nid, 
          ctu.field_update_date_value
     FROM NODE n
LEFT JOIN CONTENT_TYPE_UPDATE ctu ON ctu.vid = n.vid
    WHERE n.type IN ('update')
 GROUP BY n.nid, ctu.field_update_date_value
 ORDER BY field_update_date_value DESC

我将您的表格别名更改为更短的别名 - 更易于阅读。这是您问题的重点:

   SELECT n.nid,
          COUNT(n.fake_example_column),                
          ctu.field_update_date_value
      ...
 GROUP BY n.nid, ctu.field_update_date_value

我更改了示例以使用假列,以突出需要如何定义 GROUP BY。您引用的任何未包含在聚合函数中的列都应该GROUP BY. 我说应该是因为MySQL 是我所知道的唯一支持GROUP BY您可以选择性地省略列的数据库- 关于为什么查询在 MySQL 上工作但不能在不更改其他数据库的情况下移植的问题有很多。显然,在您的情况下,您仍然需要至少定义一个。

于 2009-12-06T04:23:55.440 回答
7

在 Laravel 框架中'strict' => false,在 config 文件夹中的数据库文件中设置 , 将解决此问题。

于 2017-12-06T12:48:58.720 回答
3

当您在 sql 中使用 sum()、min()、max() 等聚合函数时,您必须使用 group by

但是在最新的 sql 中,你也必须使用 select 中的所有列作为 group By。

为此,您在 config->database 中使用 laravel 项目

'严格' => 假,

并通过运行 php artisan config:cache 清除配置缓存。

我想这对你会更有帮助。

于 2018-07-27T12:17:09.970 回答
0

将其剥离为基础:

   SELECT COUNT( node.nid ) 
     FROM node node
LEFT JOIN content_type_update node_data_field_update_date ON node.vid = node_data_field_update_date.vid
    WHERE node.type IN ('update')
 ORDER BY node_data_field_update_date.field_update_date_value DESC
于 2009-08-07T13:17:03.160 回答
0

我在旧版本的 MySQL 5.0 中遇到了同样的问题。在较新的 5.5 版本中它可以工作!

SELECT COUNT(*), id
FROM `cities` AS `c`
于 2015-10-10T06:46:31.430 回答
0

我也发生了同样的事情。只需按照以下说明操作:

  1. 在 laravel 中,转到config/database.php
  2. 搜索'strict'=>true属性并将其更改为'strict'=>false
  3. php工匠优化

那我希望你修好它。再见!

于 2020-09-22T12:09:33.287 回答