php - 更改 SQL 模式或编辑查询?

标签 php mysql

自从最新更新以来,我收到此错误消息:

Failed to run query: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'table...' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

我已经阅读过有关此问题的信息,并且我找到的线程是删除模式“only_full_group_by”

现在,这是最佳实践,还是我应该更改我的代码?

如果我想使用 mySQL 默认值,我的查询会是什么样子?

查询

$query = "SELECT es.datum, es.objekt_element, es.anteckn, es.objekt_nr
      FROM element_skanning es
      INNER JOIN 
               (
                SELECT objekt_element, anteckn, MIN(datum) AS min_datum
                FROM element_skanning
                WHERE datum LIKE '$this_year_month'
                GROUP BY objekt_element
                HAVING COUNT(*) > 1
               )
      dup ON es.objekt_element = dup.objekt_element
      ORDER BY dup.min_datum, es.objekt_element, es.datum;
";

最佳答案

您只需从内部查询的 SELECT 列表中删除 anteckn 即可修复查询。该值未被使用,因此不会影响您的结果:

$query = "SELECT es.datum, es.objekt_element, es.anteckn, es.objekt_nr
      FROM element_skanning es
      INNER JOIN 
               (
                SELECT objekt_element, MIN(datum) AS min_datum
                FROM element_skanning
                WHERE datum LIKE '$this_year_month'
                GROUP BY objekt_element
                HAVING COUNT(*) > 1
               )
      dup ON es.objekt_element = dup.objekt_element
      ORDER BY dup.min_datum, es.objekt_element, es.datum;
";

请注意,您还需要包含

es.datum = dup.min_datum

在您的 JOIN 条件中,如果(如图所示)您只想从 element_skanning 获取与 datum 的最小值相对应的行.

关于php - 更改 SQL 模式或编辑查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55808412/

相关文章:

php - 如何公开Apache服务器?

mysql - 如何使用 SQL 查询从字母数字中获取数值并按数字排序

php - 循环内的 SQL 查询

mysql - 用户媒体的数据库设计

PHP readfile() 损坏文件

javascript - AJAX 和 PHP 数据传输不工作

MySql连接返回每种类型三行,不管有多少行

php - 独特的字母数字生成器

php - 使用 PHP 将 UCS-2 文件转换为 UTF-8

php - 通过php中的单选按钮onclick处理程序更新mysql中的标志