2010-11-29 3 views
1

저는 Insurance Quoting 시스템을 구축하고 있으며 여러 가지 질문을하고 있습니다. 내 질문은 하나의 테이블 (questionsTable)에 저장되고, 내 답변은 답변 테이블 (answersTable)에 저장되며 질문/답변 작업 (즉, 견적을 참조할지 또는 다른 질문을 묻는 지)은 actions 테이블 (actionsTable) . 여기 WHERE 절에서 MySQL 필드 값을 사용할 수 있습니까?

answerId | questionId | answerValue 
    1  | 1   | < 50% 
    2  | 1   | > 50% 
    3  | 2   | freeForm 
    4  | 3   | 1 
    5  | 3   | 2 
    6  | 3   | 3 
    7  | 3   | 3+ 

actionsTable이

actionId | answerId | action 
    1  | 2  | 2 
    2  | 6  | refer 
    3  | 7  | decline 

방법은 테이블 링크이 일부 샘플 데이터

에게

questionId | questionDescription 
    1   | What percentage of the roof is flat? 
    2   | Please provide details of the roof construction: 
    3   | How many rooms does the building have? 

answersTable questionsTable있어 : 각 질문에는 데이터베이스에서 선택할 수있는 답변이 있습니다. 특정 답변은 특정 행동을 수행합니다 - 다른 질문을하거나 견적을 거절하십시오. 그들이 다른 질문을 할 경우, 질문의 id는 action 필드에 저장됩니다.

기본적으로 '> 50 %'라고 대답하면 질문 1 '지붕의 몇 퍼센트가 납작합니까?' 당신은 대답 2를 받게됩니다.

내 질문에 'ID'가 'actionsTable'의 'action'값과 같지 않은 'questionsTable'에서 모든 질문을 선택하려면 어떻게해야합니까? 따라서 '최상위'질문을 제공합니다. 세트?

나는 내가 'actionsTable'에서 모든 숫자 값을 선택하는 두 MySQL은 쿼리, 하나를 사용하여 간단하게 PHP에서이 작업을 수행 할 수 알고, 그 다음 또 다른 질문

'SELECT questionDescription FROM questionsTable
WHERE questionsTable.questionId != 'this' AND questionsTable.questionId != 'this', etc

을이의 디자인을 선택합니다 데이터베이스는 표준화 될뿐만 아니라 동적입니다. 관리 팀은 관리자 페이지를 사용하여 질문, 답변 및 작업을 추가/제거 할 수 있습니다.

답변

2
SELECT questionDescription FROM questionsTable 
LEFT JOIN actionsTable ON questionsTable.questionId=actionsTable.action 
WHERE actionsTable.action IS NULL 

이것은 questionsTable에 모든 값을 보존에만 작업 필드에 actionsTable의 일치가없는 사람을 보여주는 두 개의 조인.

+0

당신은 절대 전설입니다. – Sjwdavies

+0

불편을 끼쳐 드려 죄송합니다. 더 자세히 설명해 주시겠습니까? – Sjwdavies

+1

LEFT JOIN에는 상관없이 "왼쪽"(첫 번째) 테이블의 모든 행이 있습니다. 해당 행이 존재하면 다른 테이블의 일치하는 행과 조인됩니다. 그렇지 않으면 해당 필드가 NULL입니다 (정확하게 찾고있는 것) –

관련 문제