我正在创建对 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 中工作,您有两个选择:
- 禁用
ONLY_FULL_GROUP_BY
模式,因此它将像早期版本一样运行。 - 更改查询,使所有非聚合列都列在
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/