2017-08-09 77 views
1

预计金额我有这个数据库中的一个测验应用程序,我要求打印的正确答案,即考试重点和为每一位用户,但如果用户离开的答案任何答案都是空的,它应该为空或“x”或任何可以识别它的东西。解决:LEFT JOIN没有返回空值,也没有记录在MySQL

每个问题有几个distractors(选项),但只有一个是正确的(distractors.correct = 1)和只有一个答案(answers.question_id),并检查答案是否正确answers.answer = distractor.option。 需要输出:

+-----------+---------------+----------+-----------+---------------+-----------+----------+ 
| exam_id | question_id | option | correct | question_id | user_id | answer | 
|-----------+---------------+----------+-----------+---------------+-----------+----------| 
|  195 |   41303 | E  |   0 |   41303 |  4404 | null  | 
|  195 |   41483 | A  |   0 |   41483 |  4404 | A  | 
|  195 |   41350 | A  |   0 |   41350 |  4404 | A  | 
|  195 |   41401 | E  |   0 |   41401 |  4404 | E  | 
|  195 |   41271 | A  |   0 |   41271 |  4404 | A  | 
|  195 |   41448 | D  |   1 |   41448 |  4404 | D  | 
|  195 |   41320 | E  |   1 |   41320 |  4404 | E  | 
|  195 |   41499 | C  |   1 |   41499 |  4404 | C  | 
|  195 |   41369 | C  |   1 |   41369 |  4404 | null  | 
|  195 |   41418 | E  |   0 |   41418 |  4404 | E  | 
|  195 |   41287 | D  |   1 |   41287 |  4404 | D  | 
|  195 |   41467 | B  |   1 |   41467 |  4404 | B  | 
|  195 |   41337 | C  |   1 |   41337 |  4404 | C  | 
|  195 |   41385 | E  |   0 |   41385 |  4404 | E  | 

预计客户结果。

key DBCCDBCCABDBBADCBCCDDCCADBACDCBACCCDDBDDADAAACCACADBDCBBDDDADABBACDADCBDABADCCAACCBBBABBACAAADXADCAABBBBCDDADCCBDBACDCABDABDACACAC 
    0001 DBCCBBCCBBBBBADBXXXXDCBABBACDCBACCCDDBDCADAAABCAADCBDCBBDDDDDCBBACDABCBDDBACACAACCBBBAABACABDDBCDCBABCBBCDDADCCBDBACDCDCDBDBCCACAC 
    0002 DACCBBCCCBDDBAACBCCDCBBABAABDCBACCCDDBDCACAAACCADABBDCBCADDDDABBBCAADCBDABACCCABBDCDBDCDADABBDDBACBABBDBDDDADCCBDBABBCDBDADBBCACAB 
    0003 CCCCCBCCBBDCBBDCBCCADCAABAAADCBABCCDCCDCADAAABCADABBCCBBBDBADABBACDADCBAABACBCCCCDCDCAADACABADBCCCBABBDDCDDDDCCBBBACDCDBDDBBACADAC 
    0004 CCDACBCCBBDDBADBBCCBABBADBACDCBACCCDDCDCADAAACCADADBDCBADDDDDABBACAACCBCACACCCAACCBBBAAAACABBDAACCCABBDBCDDADCCBDBACDCACBADCCCACAC 
    0005 CCDCCBCCABDDBADCBCCCDCBACBABDCBACCCDDBDCADAAABDDDDDDDABADDDBDABBACDAACBDACADDCCACCBBBACBACADADBADCBABBABCDDADCCBDBACDCADDBDBACADAC 
    0006 CCCCCBCCABDDCADCBCDCDCAACBACDCBABACDDBDCADAADCCADACCAABABDDBDABBACDABCADABADAACACCDBBABBACADBDCADCAACBDBCDDADCCBDBABDCABDABBBBDCAC 

我知道这将包括我不需要的转置,因为我将在数组/集合中处理php结果。 第一行有所有正确答案/选项 下一行有每个用户的答案。

@Shadow的输出:

+-----------+---------------+----------+-----------+-----------+----------+ 
| exam_id | question_id | option | correct | user_id | answer | 
|-----------+---------------+----------+-----------+-----------+----------| 
|  195 |   41263 | C  |   1 |  4404 | C  | 
|  195 |   41279 | C  |   1 |  4404 | C  | 
|  195 |   41295 | C  |   1 |  4404 | C  | 
|  195 |   41311 | D  |   1 |  4404 | D  | 
|  195 |   41327 | A  |   0 |  4404 | B  | 
|  195 |   41343 | E  |   1 |  4404 | E  | 
|  195 |   41359 | B  |   0 |  4404 | D  | 
|  195 |   41375 | E  |   1 |  4404 | E  | 
|  195 |   41391 | B  |   1 |  4404 | B  | 
|  195 |   41407 | E  |   1 |  4404 | E  | 
|  195 |   41423 | D  |   0 |  4404 | E  | 
|  195 |   41439 | C  |   1 |  4404 | C  | 
|  195 |   41455 | E  |   1 |  4404 | E  | 
|  195 |   41471 | C  |   0 |  4404 | A  | 
|  195 |   41487 | E  |   1 |  4404 | E  | 
|  195 |   41503 | B  |   1 |  4404 | B  | 
|  195 |   41519 | B  | <null> |  4404 | <null> | 
|  195 |   41535 | B  | <null> |  4404 | <null> | 
|  195 |   41551 | D  | <null> |  4404 | <null> | 
|  195 |   41567 | B  | <null> |  4404 | <null> |  |  195 |   41534 | E  | <null> |  4404 | <null> | 
|  195 |   41550 | E  | <null> |  4404 | <null> | 
|  195 |   41566 | D  | <null> |  4404 | <null> | 
+-----------+---------------+----------+-----------+-----------+----------+ 
320 rows in set 

尝试这样:

select answers.exam_id, distractors.question_id, distractors.option, distractors.correct, answers.question_id, answers.user_id, answers.answer 
         from distractors 
         LEFT JOIN answers on distractors.question_id = answers.question_id 
         AND answers.answer = distractors.option 
         AND answers.user_id = 4404 
         WHERE answers.exam_id = 195 
         ORDER BY answers.user_id 
         ; 



    +-----------+---------------+----------+-----------+---------------+-----------+----------+ 
| exam_id | question_id | option | correct | question_id | user_id | answer | 
|-----------+---------------+----------+-----------+---------------+-----------+----------| 
|  195 |   41263 | C  |   1 |   41263 |  4404 | C  | 
|  195 |   41259 | C  |   0 |   41259 |  4404 | C  | 
|  195 |   41260 | E  |   0 |   41260 |  4404 | E  | 
|  195 |   41261 | B  |   0 |   41261 |  4404 | B  | 
|  195 |   41262 | E  |   0 |   41262 |  4404 | E  | 
|  195 |   41264 | C  |   1 |   41264 |  4404 | C  | 
|  195 |   41265 | E  |   1 |   41265 |  4404 | E  | 
|  195 |   41266 | A  |   0 |   41266 |  4404 | A  | 
|  195 |   41267 | A  |   0 |   41267 |  4404 | A  | 
|  195 |   41268 | A  |   1 |   41268 |  4404 | A  | 
|  195 |   41269 | E  |   0 |   41269 |  4404 | E  | 
|  195 |   41270 | B  |   0 |   41270 |  4404 | B  | 
|  195 |   41271 | A  |   0 |   41271 |  4404 | A  | 
|  195 |   41272 | C  |   0 |   41272 |  4404 | C  | 
|  195 |   41273 | E  |   0 |   41273 |  4404 | E  | 
|  195 |   41274 | A  |   0 |   41274 |  4404 | A  | 
|  195 |   41275 | E  |   0 |   41275 |  4404 | E  | 
|  195 |   41276 | C  |   0 |   41276 |  4404 | C  | 
|  195 |   41277 | D  |   1 |   41277 |  4404 | D  | 
|  195 |   41278 | D  |   0 |   41278 |  4404 | D  | 
|  195 |   41279 | C  |   1 |   41279 |  4404 | C  | 
|  195 |   41280 | B  |   1 |   41280 |  4404 | B  | 
|  195 |   41282 | D  |   0 |   41282 |  4404 | D  | 
|  195 |   41281 | E  |   1 |   41281 |  4404 | E  | 
|  195 |   41283 | D  |   0 |   41283 |  4404 | D  | 
|  195 |   41284 | D  |   1 |   41284 |  4404 | D  | 
|  195 |   41285 | E  |   1 |   41285 |  4404 | E  | 
|  195 |   41286 | C  |   1 |   41286 |  4404 | C  | 
|  195 |   41287 | D  |   1 |   41287 |  4404 | D  | 
|  195 |   41288 | A  |   1 |   41288 |  4404 | A  | 
|  195 |   41290 | C  |   1 |   41290 |  4404 | C  | 
|  195 |   41289 | B  |   1 |   41289 |  4404 | B  | 
|  195 |   41291 | E  |   1 |   41291 |  4404 | E  | 
|  195 |   41292 | B  |   1 |   41292 |  4404 | B  | 
|  195 |   41293 | C  |   1 |   41293 |  4404 | C  | 
|  195 |   41294 | D  |   1 |   41294 |  4404 | D  | 
|  195 |   41296 | A  |   0 |   41296 |  4404 | A  | 
|  195 |   41295 | C  |   1 |   41295 |  4404 | C  | 
|  195 |   41297 | E  |   0 |   41297 |  4404 | E  | 
|  195 |   41298 | C  |   0 |   41298 |  4404 | C  | 
|  195 |   41299 | E  |   0 |   41299 |  4404 | E  | 
|  195 |   41300 | B  |   0 |   41300 |  4404 | B  | 
|  195 |   41301 | A  |   1 |   41301 |  4404 | A  | 
|  195 |   41302 | B  |   0 |   41302 |  4404 | B  | 
|  195 |   41303 | E  |   0 |   41303 |  4404 | E  | 

|  195 |   41511 | A  |   0 |   41511 |  4404 | A  | 
|  195 |   41512 | C  |   0 |   41512 |  4404 | C  | 
|  195 |   41513 | B  |   1 |   41513 |  4404 | B  | 
+-----------+---------------+----------+-----------+---------------+-----------+----------+ 
245 rows in set 

没有得到与伴随空预期的321个提问/回答。

我试了好联接,但没有给出预期的结果。

表:

DESCRIBE answers; 
+-------------+------------------+--------+-------+-----------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
|-------------+------------------+--------+-------+-----------+----------------| 
| id   | int(10) unsigned | NO  | PRI | <null> | auto_increment | 
| user_id  | int(10) unsigned | NO  | MUL | <null> |    | 
| question_id | int(10) unsigned | NO  | MUL | <null> |    | 
| answer  | char(255)  | YES |  | <null> |    | 
| created_at | timestamp  | YES |  | <null> |    | 
| updated_at | timestamp  | YES |  | <null> |    | 
| deleted_at | timestamp  | YES |  | <null> |    | 
| exam_id  | int(10) unsigned | NO  |  | <null> |    | 
+-------------+------------------+--------+-------+-----------+----------------+ 
8 rows in set 
Time: 0.006s 
    DESCRIBE questions; 
+------------+------------------+--------+-------+-----------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
|------------+------------------+--------+-------+-----------+----------------| 
| id   | int(10) unsigned | NO  | PRI | <null> | auto_increment | 
| slot_id | int(10) unsigned | NO  | MUL | <null> |    | 
| order  | smallint(6)  | NO  |  | <null> |    | 
| text  | text    | NO  |  | <null> |    | 
| created_at | timestamp  | YES |  | <null> |    | 
| updated_at | timestamp  | YES |  | <null> |    | 
+------------+------------------+--------+-------+-----------+----------------+ 
6 rows in set 
Time: 0.008s 

DESCRIBE distractors; 
+-------------+------------------+--------+-------+-----------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
|-------------+------------------+--------+-------+-----------+----------------| 
| id   | int(10) unsigned | NO  | PRI | <null> | auto_increment | 
| question_id | int(10) unsigned | NO  | MUL | <null> |    | 
| option  | varchar(255)  | NO  |  | <null> |    | 
| distractor | text    | NO  |  | <null> |    | 
| correct  | tinyint(1)  | NO  |  | <null> |    | 
| created_at | timestamp  | YES |  | <null> |    | 
| updated_at | timestamp  | YES |  | <null> |    | 
+-------------+------------------+--------+-------+-----------+----------------+ 
7 rows in set 
Time: 0.006s 

    describe exams; 
+---------------+------------------+--------+-------+-----------+----------------+ 
| Field   | Type    | Null | Key | Default | Extra   | 
|---------------+------------------+--------+-------+-----------+----------------| 
| id   | int(10) unsigned | NO  | PRI | <null> | auto_increment | 
| applicated_at | datetime   | NO  |  | <null> |    | 
| board_id  | int(10)   | NO  |  | <null> |    | 
| active  | tinyint(1)  | NO  |  |   1 |    | 
| duration  | int(10) unsigned | NO  |  | <null> |    | 
| passing_grade | int(10)   | YES |  | <null> |    | 
| annotation | text    | NO  |  | <null> |    | 
| deleted_at | timestamp  | YES |  | <null> |    | 
| created_at | timestamp  | YES |  | <null> |    | 
| updated_at | timestamp  | YES |  | <null> |    | 
+---------------+------------------+--------+-------+-----------+----------------+ 
10 rows in set 
Time: 0.014s 

的样本数据:

select * from distractors limit 1000; 

    +------+---------------+----------+--------------------------------------------------------------------------------------------------------+-----------+---------------------+---------------------+ 
| id | question_id | option | distractor                        | correct | created_at   | updated_at   | 
|------+---------------+----------+--------------------------------------------------------------------------------------------------------+-----------+---------------------+---------------------| 
| 1 |    1 | A  | Diuresis osmótica                      |   0 | 2017-01-12 21:20:29 | 2017-01-12 21:20:29 | 
| 2 |    1 | B  | Diabetes insípida central                    |   1 | 2017-01-12 21:20:29 | 2017-01-12 21:20:29 | 
| 3 |    1 | C  | Diabetes insípida nefrogénica                   |   0 | 2017-01-12 21:20:29 | 2017-01-12 21:20:29 | 
| 4 |    1 | D  | Administración de soluciones hipertónicas                |   0 | 2017-01-12 21:20:29 | 2017-01-12 21:20:29 | 
| 5 |    1 | E  | Sx de secreción inapropiada de hormona antidiurética             |   0 | 2017-01-12 21:20:29 | 2017-01-12 21:20:29 | 
| 6 |    2 | A  | TC cerebral                       |   0 | 2017-01-12 21:20:29 | 2017-01-12 21:20:29 | 
| 7 |    2 | B  | Sodio urinario                       |   0 | 2017-01-12 21:20:29 | 2017-01-12 21:20:29 | 
| 8 |    2 | C  | Osmolaridad sérica                      |   0 | 2017-01-12 21:20:30 | 2017-01-12 21:20:30 | 
| 9 |    2 | D  | Osmolaridad urinaria                     |   0 | 2017-01-12 21:20:30 | 2017-01-12 21:20:30 | 
| 10 |    2 | E  | Respuesta a vasopresina                    |   1 | 2017-01-12 21:20:30 | 2017-01-12 21:20:30 | 
| 11 |    3 | A  | Pérdida extrarrenal de agua                   |   0 | 2017-01-12 21:20:30 | 2017-01-12 21:20:30 | 
| 12 |    3 | B  | Aumento en la reabsorción de sodio                  |   0 | 2017-01-12 21:20:30 | 2017-01-12 21:20:30 | 
| 13 |    3 | C  | Aumento en la depuración de agua libre                 |   1 | 2017-01-12 21:20:30 | 2017-01-12 21:20:30 | 
| 14 |    3 | D  | Disminución en la depuración de agua libre                |   0 | 2017-01-12 21:20:30 | 2017-01-12 21:20:30 | 
| 15 |    3 | E  | Resistencia tubular a la acción de la hormona antidiurética           |   0 | 2017-01-12 21:20:30 | 2017-01-12 21:20:30 | 
| 16 |    4 | A  | Solución Hartmann                      |   0 | 2017-01-12 21:20:30 | 2017-01-12 21:20:30 | 
| 17 |    4 | B  | Solución salina al 3%                     |   0 | 2017-01-12 21:20:30 | 2017-01-12 21:20:30 | 
| 18 |    4 | C  | Solución salina al 0.9%                    |   0 | 2017-01-12 21:20:30 | 2017-01-12 21:20:30 | 
| 19 |    4 | D  | Solución glucosada al 5 %                    |   0 | 2017-01-12 21:20:30 | 2017-01-12 21:20:30 | 
| 20 |    4 | E  | Solución isotónica con HCO<sub>3</sub>                 |   1 | 2017-01-12 21:20:30 | 2017-01-12 21:20:30 | 
| 21 |    5 | A  | Mielinólisis                       |   0 | 2017-01-12 21:20:30 | 2017-01-12 21:20:30 | 
| 22 |    5 | B  | Edema cerebral                       |   1 | 2017-01-12 21:20:30 | 2017-01-12 21:20:30 | 

select * from distractors limit 1000 

+------+-----------+---------------+----------+---------------------+---------------------+--------------+-----------+ 
| id | user_id | question_id | answer | created_at   | updated_at   | deleted_at | exam_id | 
|------+-----------+---------------+----------+---------------------+---------------------+--------------+-----------| 
| 26 |  2782 |    1 | B  | 2017-01-14 15:20:39 | 2017-01-14 15:20:39 |  <null> |   1 | 
| 27 |  2755 |    1 | B  | 2017-01-14 15:20:39 | 2017-01-14 15:20:39 |  <null> |   1 | 
| 28 |  2741 |    1 | B  | 2017-01-14 15:20:42 | 2017-01-14 15:20:42 |  <null> |   1 | 
| 29 |  2755 |    2 | E  | 2017-01-14 15:20:51 | 2017-01-14 15:20:51 |  <null> |   1 | 
| 30 |  2755 |    3 | C  | 2017-01-14 15:21:11 | 2017-01-14 15:21:11 |  <null> |   1 | 
| 31 |  2755 |    4 | D  | 2017-01-14 15:21:25 | 2017-01-14 15:21:25 |  <null> |   1 | 
| 32 |  2741 |    2 | E  | 2017-01-14 15:21:34 | 2017-01-14 15:21:34 |  <null> |   1 | 
| 33 |  2763 |    1 | B  | 2017-01-14 15:21:39 | 2017-01-14 15:21:39 |  <null> |   1 | 
| 34 |  2782 |    4 | D  | 2017-01-14 15:21:40 | 2017-01-14 15:21:40 |  <null> |   1 | 
| 35 |  2755 |    5 | B  | 2017-01-14 15:21:52 | 2017-01-14 15:21:52 |  <null> |   1 | 
| 36 |  2782 |    5 | B  | 2017-01-14 15:22:06 | 2017-01-14 15:22:06 |  <null> |   1 | 
| 37 |  2763 |    2 | D  | 2017-01-14 15:22:07 | 2017-01-14 15:22:07 |  <null> |   1 | 
| 38 |  2775 |   116 | E  | 2017-01-14 15:22:19 | 2017-01-14 15:22:19 |  <null> |   1 | 
| 39 |  2775 |   117 | A  | 2017-01-14 15:22:23 | 2017-01-14 16:59:31 |  <null> |   1 | 
| 40 |  2801 |   21 | B  | 2017-01-14 15:22:25 | 2017-01-14 15:22:25 |  <null> |   1 | 
| 41 |  2775 |   118 | A  | 2017-01-14 15:22:29 | 2017-01-14 15:22:29 |  <null> |   1 | 
| 42 |  2868 |   301 | C  | 2017-01-14 15:22:30 | 2017-01-14 15:22:47 |  <null> |   2 | 
| 43 |  2763 |    3 | C  | 2017-01-14 15:22:36 | 2017-01-14 15:22:36 |  <null> |   1 | 
| 44 |  2775 |   119 | D  | 2017-01-14 15:22:37 | 2017-01-14 15:22:37 |  <null> |   1 | 
| 45 |  2801 |   22 | C  | 2017-01-14 15:22:40 | 2017-01-14 15:22:40 |  <null> |   1 | 
| 46 |  2734 |    1 | B  | 2017-01-14 15:22:41 | 2017-01-14 15:22:41 |  <null> |   1 | 
| 47 |  2799 |   16 | C  | 2017-01-14 15:22:41 | 2017-01-14 15:22:41 |  <null> |   1 | 
| 48 |  2782 |    2 | D  | 2017-01-14 15:22:48 | 2017-01-14 15:25:11 |  <null> |   1 | 
| 49 |  2798 |    1 | B  | 2017-01-14 15:22:51 | 2017-01-14 15:22:51 |  <null> |   1 | 
| 50 |  2803 |   21 | B  | 2017-01-14 15:22:51 | 2017-01-14 15:22:51 |  <null> |   1 | 
| 51 |  2795 |   36 | B  | 2017-01-14 15:22:54 | 2017-01-14 15:22:54 |  <null> |   1 | 
| 52 |  2803 |   22 | C  | 2017-01-14 15:22:54 | 2017-01-14 15:22:54 |  <null> |   1 | 
| 53 |  2781 |   41 | D  | 2017-01-14 15:22:59 | 2017-01-14 15:22:59 |  <null> |   1 | 
| 54 |  2862 |   321 | B  | 2017-01-14 15:23:01 | 2017-01-14 15:23:01 |  <null> |   2 | 
| 55 |  2764 |   31 | A  | 2017-01-14 15:23:01 | 2017-01-14 15:23:01 |  <null> |   1 | 
| 56 |  2769 |   21 | B  | 2017-01-14 15:23:02 | 2017-01-14 15:23:02 |  <null> |   1 | 
| 57 |  2755 |    6 | A  | 2017-01-14 15:23:02 | 2017-01-14 15:23:03 |  <null> |   1 | 
| 58 |  2871 |   302 | A  | 2017-01-14 15:23:03 | 2017-01-14 15:27:40 |  <null> |   2 | 
| 59 |  2803 |   24 | E  | 2017-01-14 15:23:03 | 2017-01-14 15:23:03 |  <null> |   1 | 
| 60 |  2868 |   302 | C  | 2017-01-14 15:23:04 | 2017-01-14 15:23:04 |  <null> |   2 | 
| 61 |  2862 |   322 | E  | 2017-01-14 15:23:13 | 2017-01-14 15:23:13 |  <null> |   2 | 
| 62 |  2799 |   17 | C  | 2017-01-14 15:23:15 | 2017-01-14 15:23:15 |  <null> |   1 | 
| 63 |  2769 |   22 | C  | 2017-01-14 15:23:16 | 2017-01-14 15:23:16 |  <null> |   1 | 
| 64 |  2741 |    3 | C  | 2017-01-14 15:23:17 | 2017-01-14 15:23:17 |  <null> |   1 | 

select * from exams; 
+------+---------------------+------------+----------+------------+-----------------+-----------------------------------------------------------------+--------------+---------------------+---------------------+ 
| id | applicated_at  | board_id | active | duration | passing_grade | annotation              | deleted_at | created_at   | updated_at   | 
|------+---------------------+------------+----------+------------+-----------------+-----------------------------------------------------------------+--------------+---------------------+---------------------| 
| 1 | 2017-01-14 09:00:00 |   32 |  1 |  180 |   <null> |                 |  <null> | 2017-01-12 21:22:08 | 2017-01-12 21:22:08 | 
| 2 | 2017-01-14 09:05:00 |   32 |  1 |  180 |   <null> |                 |  <null> | 2017-01-12 21:25:14 | 2017-01-12 21:25:14 | 
| 12 | 2017-01-19 16:00:00 |   13 |  1 |  180 |    120 |                 |  <null> | 2017-01-17 19:44:00 | 2017-01-17 19:44:00 | 
| 42 | 2017-02-01 16:00:00 |   41 |  1 |  250 |    0 |                 |  <null> | 2017-01-30 12:40:21 | 2017-01-30 12:40:21 | 
| 62 | 2017-03-03 11:00:00 |   48 |  1 |   60 |   <null> | Biología Molecular 2           |  <null> | 2017-01-31 20:59:19 | 2017-01-31 20:59:19 | 
| 88 | 2017-03-03 12:30:00 |   49 |  1 |   70 |   <null> | Citogenética 2             |  <null> | 2017-02-01 04:49:44 | 2017-02-01 04:49:44 | 
| 99 | 2017-02-17 17:00:00 |   28 |  1 |  120 |   <null> | Examen de 130 reactivos           |  <null> | 2017-02-16 16:01:08 | 2017-02-16 16:01:08 | 
| 109 | 2017-02-23 09:00:00 |   34 |  1 |  180 |   <null> | Examen de 65 casos Neuro fisiología        |  <null> | 2017-02-21 18:37:57 | 2017-02-21 18:37:57 | 
| 112 | 2017-02-25 09:00:00 |   47 |  1 |  180 |   <null> | Examen de 61 casos en Tlatelolco        |  <null> | 2017-02-21 22:03:19 | 2017-02-21 22:03:19 | 
| 121 | 2017-02-25 10:00:00 |   41 |  1 |  240 |   <null> | Examen de 71 casos en Universisad Anuahuac      |  <null> | 2017-02-21 22:31:37 | 2017-02-21 22:31:37 | 
| 123 | 2017-02-25 09:00:00 |   18 |  1 |  180 |   <null> | Examen de 60 casos hematología adultos       |  <null> | 2017-02-22 13:50:20 | 2017-02-22 13:50:20 | 

回答

1

我的答案假定你只想包括那些用户的结果,实际上是参加了考试(至少回答了1个问题)。

由于我不知道是否有任何表格显示谁订阅了哪些考试(如果您不这样做,您应该这样做),我必须通过获取所有不同的考试ID来创建参加考试的用户列表 - 用户id在子查询中作为派生表对。

此外,考试与问题表之间存在脱节 - 可能存在连接两个表的插槽表。由于这种脱节,我不得不在派生表中使用答案表来加入考试和问题。但是,这意味着在同一考试的不同位置问的问题不能相互区分。此外,这意味着如果所有用户都跳过了相同的问题,那么它将不会显示在结果中。

inner join从派生表上的distractors表的问题和正确的选项,左加入用户对此的答案。我将在连接中使用圆括号来强制MySQL创建考试 - 用户 - 问题 - 首先正确回答resultset,然后执行左连接。

select t1.exam_id, t2.question_id, d.option, (d.option=a.answer) as correct, t1.user_id, a.answer 
from 
    (
    (select distinct exam_id, user_id from answers) t1 
    inner join 
    (select distinct exam_id, question_id from answers) t2 a on t1.exam_id=t2.exam_id 
    inner join questions q on t2.question_id=q.id 
    inner join distractors d on q.id=d.question_id and d.correct=1 
    ) 
left join answers a on t1.exam_id=a.exam_id and t1.user_id=a.user_id and q.id=a.question_id 
+0

非常感谢你,这是正确的事情!!在这一刻,它有点超过我的头,但像魅力一样。将用您的查询输出更新问题。再次感谢@Shadow –

+0

有一个'exam_user'表使用户与考试相关。此外还有一个“插槽”表格,将考题与问题挂钩。将插槽看作一组n> 0个问题,以便同时向用户呈现。如果你认为这可以通过这个细节得到改善,请让我知道并再次感谢@Shadow。 –

+0

您可以使用这些表来代替派生表。查询可能运行得更快(取决于这些表中数据的样子)。 – Shadow

0

看样子你是随机尝试使用的表是如何与对方没有真正理解或你想要的数据的东西。你需要系统地理解这些数据的含义。不要随意尝试加入。

我会建议将它分解为步骤,然后将每个新资料片和检查结果在一步一个脚印。如果您遇到问题,这可以帮助您隔离信息开始不再有意义的确切位置。如果你从一个考试和一个用户开始,并且在删除这些条件之前首先使用小数据集来处理所有事情,这也很有帮助。

首先,你需要知道哪些问题属于哪个考试,怎样才是正确的答案。因为你不需要问题和答案而没有彼此的关系,这些很可能需要内部联接。

然后,你需要添加一个加盟谁采取考试的用户。请注意,如果你要处理他们没有回答的问题,那么这次加入需要考试,而不是问题。由于您只对拥有应答用户的考试感兴趣,因此需要进行内部连接。

然后你在用户给了中考的问题的答案补充。现在您使用左连接,因为会有一些问题没有被参加考试的用户回答。

然后你可以比较他们的答案和正确的答案。

我不能弄清楚什么是分心,所以我没有包括这个。不知何故,如果你需要它,你需要了解这与其余的意义如何相关。一旦你理解了这个意思,语法就变得清晰了。

+0

感谢您的快速回答。但我认为他们不是随机的。到目前为止,我设法使用联接对用户进行评分,并计算答案的数量以及正确和不正确的答案,所有这些将答案与distractors相关联,并使用answers.exam_id进行过滤。 A),B),C)等多项选项考试中的选项是可选的。I大部分与考试相关的计算,例如按科目和“学校”排列的所有等级以及平均值,方差,可靠性指数等我可以根据我的查询来计算它们是加入部分,以获得空洞的答案,我还没有把握。 –

+0

@MarcoSantana对不起,但我同意HLGEM,你的尝试似乎很随机。为什么?因为每个输出中都有完全不同的字段列表,甚至有不同的表格列表。不幸的是,这个答案似乎是一个大的评论,并非真正的答案:S – Shadow

+0

我感谢你的意见和输入@Shadow和HLGEM。那些尝试只有测试,看看为什么我不能得到空的答案(空字段)。无论哪种方式,我添加了预期的输出和我的客户要求的。 –

相关问题