2010-11-29 113 views
1

我正在建立一個保險報價系統,並提出了一些問題。我的問題存儲在一個表(questionsTable)中,我的答案存儲在答案表(answersTable)中,問題/答案操作(即是引用報價還是提示另一個問題)存儲在動作表(actionsTable) 。是否可以在WHERE子句中使用MySQL字段值?

下面是一些樣本數據

questionsTable

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

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 

的方式表的鏈接是這樣的: 每個問題都有答案,可以從數據庫中選擇某些答案攜帶某些操作 - 提出另一個問題,或拒絕報價。如果他們要問另一個問題,問題的ID存儲在操作字段中。所以基本上,如果你回答問題1'> 50%''屋頂的百分比是平的嗎?'你會得到問題2來回答。

我的問題是,如何從'questionsTable'中選擇所有的問題,哪裏的ID不等於'actionsTable'中的任何'action'值 - 因此給了我'最高級別'的問題組?

我知道我可以用兩個MySQL查詢,1至從「actionsTable」選擇所有的數值做這個簡單的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 2010-11-29 18:48:55

相關問題