我的查询在某种程度上有效。 它返回'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]";
谁能告诉我为什么?我搜索过,无法找出原因不正常的原因。
答案 0 :(得分:8)
这不是像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;
答案 1 :(得分:0)
稍微更改查询:
$bestAnswerQuery = mysql_query("SELECT content, rating as rating
FROM answers
WHERE questionID = '$questionID'
AND rating = MAX(rating)");