2

私は、最高のレベルとあなたが完了したレベルの数を取得する小さなゲームを構築しています。これは、質問の半分以上が正解です。これをチェックするクエリがありますが、質問テーブルを統合する方法がわからない問題があります。ユーザーが質問に答えようとしなかった場合、回答テーブルに行は書き込まれません。したがって、実際には各レベルの回答表の行数と比較されます。これを統合する方法についてのアイデアはありますか? 実際には (count(*)/2)

Cursor c = myDataBase
                .rawQuery(
                        "select level, (select count(*) from ( select level from answers group by level having sum (answercorrect) >= (count(*)/2) ) answers ) completedlevels, "
                                + "from answers "
                                + "group by level "
                                + "order by sum (score) desc ", null);

私はこれを試しましたが、うまくいきませんでした:

Cursor c = myDataBase
                .rawQuery(
                        "select level, (select count(*) from ( select level from questions group by level having sum (answercorrect) >= ((select count(*)/2 from questions group by level) ) answers ) completedlevels, "
                                + "from answers "
                                + "group by level "
                                + "order by sum (score) desc ", null);

編集 テーブル構造は次のとおりです。

questions table
id    level   question
1      1      question1level1
2      1      question2level1
...  
30     1      question30level1
31     2      question1level2
32     2      question2level2
...  
70     2      question40level2
71
...

//注: レベルごとに異なる数の問題を設定できます

回答表

id   question_id   player   answercorrect   score   attempts  
1     5             1        1              1000     1
2     10            1        1              900      1
3     7             2        0              700      3
4     10            2        0              500      3
5     13            2        1              100      1
6     8             1        1              800      2

...

4

2 に答える 2

2

必要なものは、SQL Join と呼ばれます。簡単な SQL Join の例は、ここにあります。

テーブルに次のデータがあるとします。

Employee Table:
LastName    DepartmentID
Rafferty      31
Jones         33
Steinberg     33
Robinson      34
Smith         34
John          NULL

.

Department table:
DepartmentID    DepartmentName
31              Sales
33              Engineering
34              Clerical
35              Marketing

次のクエリを使用すると...

SELECT
FROM employee, department
WHERE employee.DepartmentID = department.DepartmentID;

節内のステートメントWHEREは結合条件と呼ばれ、これはEqui-Join. それはあなたにこれを得るでしょう、あなたは得るでしょう、

LastName   DepartmentID    DepartmentName
Rafferty      31           Sales
Jones         33           Engineering
Steinberg     33           Engineering
Robinson      34           Clerical
Smith         34           Clerical
于 2012-11-21T19:38:33.037 に答える
2

SQL 結合は、テーブル内の特定の列間の関係に基づいて、2 つ以上のテーブルからデータをクエリするために使用されます。詳細については、この url 、sql_joinを参照してください。

例えば

select level from question q
inner join answer a on (a.questionID = q.questionID)

同じ質問IDを持つ回答テーブルに挿入された質問テーブルからレベル列データを取得します。

JOINキーワードで関係を作ることができます。

また、このa-visual-explanation-of-sql-joinsを参照することもできます

テーブル構造が間違っていると思います。リレーショナルではありません。以下の構造を使用することをお勧めします。

ここに画像の説明を入力

以下のクエリを使用すると、必要に応じてクエリをカスタマイズした後、何人のユーザーが質問に正しく回答したかを確認できます。

SELECT     *
FROM       tbl_question 
INNER JOIN tbl_userAnswers ON tbl_question.id = tbl_userAnswers.userChoiceID
INNER JOIN tbl_correctAnswers ON tbl_question.id = tbl_correctAnswers.QuestionId and tbl_userAnswers.userChoiceID = tbl_correctAnswers.correctChoiceId

ここに画像の説明を入力

于 2012-11-21T17:16:20.887 に答える