2013-05-07 3 views
0

SQL 수수께끼는 여기에 있습니다.SQL 결합 수수께끼

간단한 형태에서

, 나는 3 개 테이블이 있습니다

테스트

tnum  name  
------------- 
1  A   
2  B  

섹션을

tnum  snum num_of_qs 
------------------------- 
1  1  6 
1  2  7 

질문

,536,
tnum  qnum  
------------- 
1  1   
1  2 

각 테이블에는 분명히 그 이상의 데이터가 있습니다.

tnum을 제외하고 section 테이블과 question 테이블 간에는 링크가 없습니다. 이 SQL 호출은 다음과 같습니다.

SELECT * FROM test t 
LEFT JOIN section s ON s.tnum = t.tnum 
LEFT JOIN question q ON q.tnum = t.tnum... 

각 섹션에 대해 일련의 질문이 모두 전송됩니다. 17 개의 섹션으로 나뉘어 진 100 개의 질문이 있다면, 나는 1700 개의 질문을 얻습니다.

모든 질문과 모든 섹션을 중복 호출없이 한 번의 호출로 얻을 수있는 방법이 있습니까?

감사

+0

원하는 결과 집합은 어떻게 표시되어야합니까? – raina77ow

+0

아마도 '별개'입니까? – LukeHennerley

+0

@ raina77ow 배열을 반복하고 배열을 정렬 한 다음 AJAX 호출을 반환하기 전에 json_encode를 사용하므로 실제로 신경 쓰지 않아도됩니다. 열쇠는 오직 한 세트의 답을 원한다는 것입니다. – Nick

답변

1

데이터베이스 구조는 (이름 만 '등 열을 제외한, 왼쪽 필드 필수가 되)해야한다 :

질문 :

  • QNUM
  • snum을

섹션

  • snum
  • tnum

테스트

  • tnum

(굵은 - 기본 키)

및 쿼리는해야 뭔가 같은 :

SELECT 
    q.qnum, 
    s.snum, 
    t.tnum 
FROM 
    questions q 
    LEFT JOIN sections s ON q.snum = s.snum 
    LEFT JOIN tests t ON s.tnum = t.tnum 
+0

@nick 질문이 섹션에 속한 경우 질문 데이터를 섹션 데이터와 독립적으로 유지하는 데 전혀 도움이되지 않습니다. –

+0

어쩌면 당신 말이 맞아. 나는 그것을 바꿀 것이다. – Nick

1
SELECT 
    ts.tnum, 
    ts.name, 
    ts.snum, 
    ts.num_of_qs, 
    q.qnum 
FROM 
(SELECT  
    t.tnum, 
    t.name, 
    s.snum, 
    s.num_of_qs 
FROM test t 
LEFT JOIN section s ON s.tnum = t.tnum) As ts 
LEFT JOIN question q ON q.tnum = ts.tnum 

SQL 문 위의 시도. 내가 조인 테스트 및 섹션 테이블과 가상 "TS"테이블을 만듭니다. 이 TS 테이블은 마침내 질문 테이블과 조인합니다.

+0

이것은 유망 해 보입니다. 눈에 띄게 느린가? – Nick

+0

당신은 혼자서 내가 질문했을 때 실제로 그 질문에 답했습니다. 그러나 현실에서는 너무 과장되었습니다. 나는 탄환을 물고 섹션 데이터를 질문 표에 추가해야합니다. +1 그럼에도 불구하고 :) – Nick

+0

예, Fthiella 왜냐하면 내가 여기에 하위 쿼리 가상 테이블을 사용하고 있습니다. 성능이 저하됩니다. –