是否可以在WHERE子句中使用MySQL字段值?

问题描述:

我正在建立一个保险报价系统,并提出了一些问题。我的问题存储在一个表(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

这样做的设计数据库将被规范化,但也是动态的,例如管理团队可以使用管理页面添加/删除问题,答案和操作。

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