2012-11-21 46 views
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 

...

+0

界定 “不工作” – njzk2

+0

这是错误:11-21 18:05:40.858:E/AndroidRuntime(22175):JAVA。 lang.RuntimeException:无法启动活动ComponentInfo {com.test.com/com.Score}:android.database.sqlite.SQLiteException:near“answers”:语法错误:,在编译时:select level,(select count(*) (从答案中选择级别)(总分(答案)> =((选择数量(*)/ 2,其中答案为答案))答案)已完成级别,从答案逐级求和(分数)desc –

+0

那'')答案)completedlevels'对我来说看起来很奇怪 – njzk2

回答

1

SQL连接用于从两个或多个表中查询数据,基于这些表中某些列之间的关系。 你可以参考这个网址,sql_join更多细节

例如

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

它从那里插入回答表相同questionID问题表带来级别coloumn数据。

您可以与JOIN关键字建立关系。你

也可以参考这个a-visual-explanation-of-sql-joins

我觉得你的表结构是错误的,它不是关系。我建议你使用下面的结构。

enter image description here

下面的查询,你可以找到多少用户做了corerrectly回答问题,之后比你可以自定义任何你想要的查询。

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 

enter image description here

+0

谢谢@talhakosen,你可能有一个很好的例子ERE?我似乎无法弄清楚我应该如何建立它.. –

+0

嗨,我dited我的答案,我希望它对你有帮助。 – Talha

+0

但是,这也是与数字相比较的方式吗?基本上它只是获得水平,如果X级的所有正确的总和至少是X级的B级的项目数量。我会尝试,但它不清楚我应该如何集成连接功能.. –

2

你需要什么叫做SQL加入。 可以找到简单的SQL加入示例here

让我们假设你对你的表下面的数据,

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