1

2行のanswersというテーブルがあります。

質問ID-回答

おそらく、questionidには質問ID番号が格納され、answerには回答が格納されると推測できるため回答は1から8までの数字にすぎません。

トップアンサーを表示したい。

例えば:

質問ID-回答

4 - 7
4 - 3
4 - 3
2 - 3
6 - 7
7 - 1
9 - 8
1 - 5

トップアンサー=3

私はもう試した:

SELECT answer FROM answers WHERE questionid='$qid' ORDER BY answer DESC LIMIT 1

SELECT DISTINCT answer FROM answers WHERE questionid='$qid' ORDER BY answer DESC LIMIT 1

$ qid =ページIDすなわち:/question.php?qid=4

しかし、両方とも正しく返されません。

アップデート:

使用せずに結果を表示することはできませんか?

while($row = mysql_fetch_array($result)) {
// stuff here
}

$ qidに基づいて1つの結果(つまり、トップアンサー)を表示したいので

4

2 に答える 2

2

これを行うには複数の方法があります(HAVING()、、、WHEREなどMAX())。共通点はGROUP BYです。

SELECT answer, COUNT(answer) FROM questions GROUP BY answer ORDER BY COUNT(answer) DESC LIMIT 1

これは戻ります:

3 - 3

についてGROUP BYもっと読む。

アップデート

この回答を投稿した後、質問を変更したようです。

WHEREクエリを特定の質問に限定する場合は、他の質問として句を追加します。

... FROM questions WHERE questionid = X GROUP BY ...

注:SQLインジェクションに注意してください。

レコードが1つしかない場合は、whileループを省略して、上位の結果にアクセスするだけです。

$result = mysql_query($sql);
$row = mysql_fetch_array($result);

注:エラーチェックをさらに実行する必要があります(たとえば、結果が返されたことを確認します)。mysql_*また、関数は廃止されたため、使用しないでください。代わりにMySQLiまたはPDOを使用してください。

于 2012-07-25T01:39:03.180 に答える
1
SELECT count(*) AS answer_count, answer FROM answers WHERE questionid='$qid' GROUP BY answer ORDER BY answer_count DESC LIMIT 1
于 2012-07-25T01:39:42.900 に答える