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句は全体的な結果に影響します。したがって、最初にすべてが合計され (結果は 1 行 - すべての行の合計になります)、次に最初の 5 つが取得されます (これも 1 行のみです)。 .

目標を達成する最も簡単な方法は、最初の 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 に答える