2

このクエリはある程度機能しています。'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]";

誰か教えてもらえますか?検索しましたが、なぜこれが正しく機能しないのかわかりません。

4

2 に答える 2

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;
于 2012-04-25T03:41:57.080 に答える
0

クエリを次のように少し変更します。

$bestAnswerQuery = mysql_query("SELECT content, rating as rating 
          FROM answers 
          WHERE questionID = '$questionID'
            AND rating = MAX(rating)");
于 2012-04-25T03:40:48.473 に答える