1

我有一个名为answers的表,有 2 行:

questionid - 答案

正如您可能猜到的那样, questionid存储问题 ID 编号,answer存储答案,答案只是数字 1 到 8

我想显示最佳答案。

例如:

questionid - 答案

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()WHEREMAX()等),共同点是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_*函数,因为它们现在已弃用。请改用MySQLiPDO

于 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 回答