更改SQL模式或编辑查询?

时间:2019-04-23 09:44:01

标签: php mysql

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

  

无法运行查询:SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT列表的表达式#2不在GROUP BY子句中,并且包含非聚合列'table ...',该列在功能上不依赖于其中的列GROUP BY子句;这与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;
";

1 个答案:

答案 0 :(得分:1)

您可以通过简单地从内部查询的anteckn列表中删除SELECT来修复查询。该值未使用,因此不会影响您的结果:

$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的最小值相对应的行。