我在某种程度上有这个查询.它返回'rating'的正确值(输出为7,最高评级),但'content'的输出来自表中的不同行.(不是最高等级的行,即7)
$bestAnswerQuery = MYSQL_QUERY("SELECT content, MAX(rating) as rating FROM answers WHERE questionID = '$questionID'");
$fetchBestAnswer = MYSQL_FETCH_ASSOC($bestAnswerQuery);
echo "$fetchBestAnswer[content] $fetchBestAnswer[rating]";
Run Code Online (Sandbox Code Playgroud)
谁能告诉我为什么?我搜索过,无法找出原因不正常的原因.
这不是聚合MAX在SQL中工作的方式.您的困惑来自MySQL(默认)非ANSI处理聚合.
像MAX群体一样操作的聚合.在没有group by子句的情况下,整个结果集被认为是单个组.只有作为group by子句一部分的表达式才能包含在select子句中,而不必包含在聚合中.如果没有group by,则select子句中的所有列或表达式必须包含在聚合中.
但是,MySQL的默认配置通过允许您在select子句中包含非分组表达式来打破这一点,但是任何给定表达式用于获取其值的行是未定义的; 它可以是组内的任何行.
在那个冗长的答案之后,如果您想获得的是给定问题的表中的最大值rating和关联content列,您可以这样做:
select
rating,
content
from answers
where questionID = '$questionID'
order by rating desc
limit 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4933 次 |
| 最近记录: |