2013-03-07 93 views
0

我有2張桌子。從兩個表中獲取數據?

之一成立問題:

id | question 
1 How old are you? 
2 Are you male of female? 

其他持有考試:

id | title  | question_ids 
1 Summer Exam  [1,2] 

我的問題是,我想選擇考試表格中的考試,並獲得所有的相關問題該特定考試(question_ids字段),但是從問題表中獲取問題,而不僅僅是存儲在question_ids中的標識。

我該怎麼做?

+0

如果您在問題表中存儲問題所屬考試的ID,將更容易找出答案:您真正顯示的P – BlackBear 2013-03-07 20:44:42

+0

使用弱實體來存儲'question_IDs'。這是非常糟糕的數據庫設計方式。 – 2013-03-07 20:45:45

+1

不要在數據庫中存儲'[1,2]''。而是建立一個鏈接表'examQuestions',它具有'examID'和每個'questionIDs'。 – 2013-03-07 21:28:41

回答

0

您可以使用FIND_IN_SET命令。請注意,這不會將您的索引,所以它可能會很慢

SELECT title, question 
FROM questions 
INNER JOIN exams 
ON FIND_IN_SET(questions.id, exams.question_ids) 

你也可以使用一個IN。請注意,這隻適用於選擇特定考試。如果沒有選擇特定的考試,你將返回在整個考試表中question_ids列中引用的每個記錄

SELECT title, question 
FROM questions, exams 
WHERE exams.id = 1 
AND questions.id IN (question_ids) 
+0

感謝您的回答,我需要提供考試編號,以便第二個解決方案是完美的,但我似乎可以讓它工作。 – panthro 2013-03-07 21:16:11

+0

你有錯誤嗎?你怎麼知道它不工作? – 2013-03-07 22:19:27

0

在你的問題表也許改變你的ID列被q_id和question_id也被稱爲q_id讓你擁有明確的方式來鏈接你的表格。例如,將您的ID列更改爲exam_id,然後您的名字就不那麼令人困惑了。那麼你可以使用內部連接,例如...

SELECT q.q_id, q.question, e.exam 
FROM questions q 
INNER JOIN exams e ON q.q_id=e.q_id 
WHERE ...... 

就是這樣的。