【问题标题】:Distinct function broken in MySQL 5.7MySQL 5.7 中破坏了不同的功能
【发布时间】:2020-11-09 12:42:33
【问题描述】:

自 MySQL 5.7 升级以来,我的以下代码已停止工作:

$myDB->contentArray = $myDB->executeAssoc("
       SELECT DISTINCT(YEAR(displayDate)) as year FROM
       `inlineItemData_standardList` 
       WHERE `inlineItemGroupID` = $inlineItemGroupID 
       ORDER BY `displayDate` desc");   

谁能告诉我如何替换 DISTINCT 部分?我四处搜索,可以找到其他有相同问题但没有大量 PHP 知识的人,我似乎无法实现正确的事情。我尝试使用 GROUP BY 'YEAR(displayDate)) as year' 但似乎无法让它工作。提前致谢。

【问题讨论】:

  • 可能有但不是因为 DISTINCT,请提供样本数据和预期结果的更多详细信息。
  • “停止工作”。造成了什么错误?它只是没有返回任何结果还是实际上是一个故障报告?
  • DISTINCT 不是函数。 SELECT DISTINCT YEAR(displayDate) as `year` FROM ..
  • 抱歉没有更清楚。它抛出的错误是:ORDER BY 子句的表达式#1 不在 SELECT 列表中,引用列 'my_dbnew.inlineItemData_standardList.displayDate' 不在 SELECT 列表中;这与 DISTINCT 不兼容

标签: php mysql sql sql-order-by distinct


【解决方案1】:

SELECT DISTINCT 查询的ORDER BY 子句必须与SELECT 子句一致。

所以:

SELECT DISTINCT YEAR(displayDate) as year 
FROM inlineItemData_standardList
WHERE inlineItemGroupID = ?
ORDER BY YEAR(displayDate) DESC
-- Or: ORDER BY `year` DESC

旁注:使用准备好的语句!不要在查询字符串中连接变量:这既低效又不安全。推荐阅读:How can I prevent SQL injection in PHP?

【讨论】:

    猜你喜欢
    • 2011-06-23
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多