自从最新更新以来,我收到此错误消息:
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/