預計金額我有這個數據庫中的一個測驗應用程序,我要求打印的正確答案,即考試重點和爲每一位用戶,但如果用戶離開的答案任何答案都是空的,它應該爲空或「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 |
非常感謝你,這是正確的事情!!在這一刻,它有點超過我的頭,但像魅力一樣。將用您的查詢輸出更新問題。再次感謝@Shadow –
有一個'exam_user'表使用戶與考試相關。此外還有一個「插槽」表格,將考題與問題掛鉤。將插槽看作一組n> 0個問題,以便同時向用戶呈現。如果你認爲這可以通過這個細節得到改善,請讓我知道並再次感謝@Shadow。 –
您可以使用這些表來代替派生表。查詢可能運行得更快(取決於這些表中數據的樣子)。 – Shadow