2017-08-09 199 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。那些嘗試只有測試,看看爲什麼我不能得到空的答案(空字段)。無論哪種方式,我添加了預期的輸出和我的客戶要求的。 –