2013-03-07 3 views
0

2 개의 테이블이 있습니다.두 테이블에서 데이터를 가져 옵니까?

내 질문은
id | title  | question_ids 
1 Summer Exam  [1,2] 

, 나는 시험 테이블에서 시험을 선택하고 관련된 모든 질문 싶어 :

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

다른 하나는 시험을 원하는 분야

하나는 질문에 보유 그 특정 시험 (question_ids 필드),하지만 question_ids에 저장된 ID뿐만 아니라 질문 테이블에서 질문을 얻으십시오.

어떻게하면됩니까?

+0

질문 테이블에 질문을 저장하면 답을 찾는 것이 훨씬 쉬울 것입니다 : P – BlackBear

+0

정말보기에는 약한 엔티티를 사용하여'question_IDs '를 저장합니다. 이것은 데이터베이스 설계가 매우 빈약합니다. –

+1

데이터베이스에'[1,2]'를 저장하지 마십시오. 대신에'examQuestions'라는 링크 테이블을 만드십시오. 그것은'examID'와'questionID'를 가지고 있습니다. –

답변

0

FIND_IN_SET 명령을 사용할 수 있습니다. 이것이 당신의 인덱스를 사용하지 않습니다, 그래서

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

당신은 또한 IN를 사용할 수있는 매우 느려질 수 있습니다. 이 방법은 특정 시험을 선택할 때만 작동합니다. 특정 시험을 선택하지 않고 당신은 그래서 당신은이 또한 q_id 호출 할 때마다 q_id 할

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

답을 알려줘서 고마워. 두 번째 해결책이 완벽하기 때문에 시험의 ID를 제공해야하지만, 제대로 작동하는 것처럼 보일 수있다. – panthro

+0

오류가 있습니까? 작동하지 않는다는 것을 어떻게 알 수 있습니까? –

0

어쩌면 귀하의 질문 테이블에 ID 열을 변경하려면 전체 시험 테이블에 question_ids 열에서 참조 기록하고 question_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 ...... 

그런 것.

관련 문제