我正在用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
我认为这会将最后5行的answercorrect
列相加,给我一个4的答案,但它给了我7,这是所有行的结果。
我觉得我错过了一些明显的东西。这似乎是一件简单的事情。
有什么想法吗?
答案 0 :(得分:12)
试试这个:
SELECT sum(answercorrect)
FROM (SELECT answercorrect FROM `answersgiven` ORDER BY rowID DESC LIMIT 5) t1
在您的查询中,LIMIT
子句会影响整体结果:首先对所有结果进行求和(得到一行 - 所有行的总和),然后取出前5行(如果可用的话)(这又是一行)。
实现目标的最简单方法是先选择前5行(在子选择中),然后再总结。
答案 1 :(得分:2)
尝试此查询
SELECT sum(col)
FROM (SELECT col FROM `table` ORDER BY id DESC LIMIT 5) t1
答案 2 :(得分:0)
你快到了。现在总结一下前5个答案:
SELECT SUM('top5')
FROM
(SELECT answercorrect AS 'top5'
FROM `answersgiven`
ORDER BY id DESC LIMIT 5) 'x'