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 连接示例。

假设您的表中有以下数据,

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 连接用于根据这些表中某些列之间的关系从两个或多个表中查询数据。你可以参考这个 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 回答