php - 旧 MySQL 中的错误查询

标签 php mysql

我正在创建对 Count 表的查询。

$Month = $_POST['Month'];
$query = "SELECT ANY_VALUE(AD) AS ad,
              COUNT(*) AS `Click`,
              DATE_FORMAT(ANY_VALUE(TIME), '%Y-%m')  AS `Month` 
          FROM `clicks` 
          WHERE DATE_FORMAT(TIME, '%Y-%m')='$Month' 
          GROUP BY ad ASC ";

它在 MySql 版本中工作是 5.7.10 (Localhost)。 然后上传到网络服务器,服务器使用 MySql 版本 5.1.66-cll,但我发现错误:

"Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1305 FUNCTION server_dbname.ANY_VALUE does not exist' in...."

如果我删除 ANY_VALUE,可以在 MySQL 5.1.66 中工作,但不能在 MySQL 5.7.10 中工作 如何使 Query 在两个版本(新版本和旧版本)中工作?

非常感谢您的回答。 (对不起,我的英语不好)

最佳答案

MySQL 5.7 中添加了 ANY_VALUE 函数,允许您为单个查询覆盖 ONLY_FULL_GROUP_BY SQL 模式的行为。此模式的默认值在 5.7 中更改为启用,因此您可以修改未列出所有列的旧查询。

如果您删除 ANY_VALUE 并希望它在 5.7 中工作,您有两个选择:

  1. 禁用 ONLY_FULL_GROUP_BY模式,因此它将像早期版本一样运行。
  2. 更改查询,使所有非聚合列都列在 GROUP BY 子句中。
    SELECT ad,
        COUNT(*) AS `Click`,
        DATE_FORMAT(TIME, '%Y-%m')  AS `Month` 
    FROM `clicks` 
    WHERE DATE_FORMAT(TIME, '%Y-%m')='$Month' 
    GROUP BY ad ASC, Month

关于php - 旧 MySQL 中的错误查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35192330/

相关文章:

php - PDO 准备语句 fetch() 返回双重结果

php - 如何使 url 未经授权 - laravel

php - 维基百科使用哪种维基标记解析器?

python - Django with MySQL : DatabaseError (1406, "Data too long for column ' name' at row 1")

mysql - Hibernate 标准表达式

php - 根据单元格中的多个值选择表格

mysql - 通过在 SQL 中连接相同模式的 2 个表来查找列的总和和最大值

php - 使用暂停逻辑 mysql TIMEDIFF() 和 PHP 耗时

php - MySQL - 照片评论、投票、关键字、++,在单个表中?

php - 创建复杂的 hasManyThrough Laravel 4 查询