3

我正在用 PHP/MySQL 构建一个小测验游戏。在提出问题后,我想要一个屏幕来显示上一轮有多少人被正确回答。

我将他们的回答是否正确存储在如下所示的表格中:

rowID | questionid | playerid | answercorrect |
1     | 1          | 1        | 1             |
2     | 2          | 1        | 1             |
3     | 3          | 1        | 1             |
4     | 4          | 1        | 1             |
5     | 5          | 1        | 0             |
6     | 6          | 1        | 1             |
7     | 7          | 1        | 1             |

我想看看最后 x(通常是 5 个)问题中有多少被正确回答。

我以为这很简单。我正在尝试这个:

SELECT sum( answercorrect ) FROM `answersgiven` ORDER BY id DESC LIMIT 5 

我认为这会将answercorrect最后 5 行的列相加,给我的答案是 4,但它给了我 7,这是所有行的结果。

我觉得我错过了一些明显的东西。这似乎是一件简单的事情。

有任何想法吗?

4

3 回答 3

13

尝试这个:

SELECT sum(answercorrect) 
FROM (SELECT answercorrect FROM `answersgiven` ORDER BY rowID DESC LIMIT 5) t1

示例小提琴

在您的查询中,该LIMIT子句会影响整体结果:因此,首先将所有结果相加(结果为一行 - 所有行的总和),然后采用前 5 个(如果可用)(这又是一行) .

实现目标的最简单方法是首先选择前 5 行(在子选择中),然后进行总结。

于 2013-09-21T12:24:15.700 回答
2

试试这个查询

SELECT sum(col) 
FROM (SELECT col FROM `table` ORDER BY id DESC LIMIT 5) t1
于 2013-09-21T12:29:48.820 回答
0

您快到了。现在总结一下前 5 个答案:

SELECT SUM('top5')
FROM 
  (SELECT answercorrect AS 'top5' 
   FROM `answersgiven` 
   ORDER BY id DESC LIMIT 5) 'x'
于 2013-09-21T12:25:24.210 回答