为什么sql MAX功能不正常?

时间:2012-04-25 03:35:40

标签: php sql max

我的查询在某种程度上有效。 它返回'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]";

谁能告诉我为什么?我搜索过,无法找出原因不正常的原因。

2 个答案:

答案 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)");