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

时间:2010-11-29 18:34:32

标签: php mysql

我正在建立一个保险报价系统,并提出了许多问题。我的问题存储在一个表(questionsTable)中,我的答案存储在答案表(answersTable)中,问题/答案操作(即,是否引用引用或提示另一个问题)存储在actions表中(actionsTable)

以下是一些示例数据

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回答'&gt; 50%''屋顶的百分比是多少?'你得到问题2回答。

我的问题是,如何选择'questionsTable'中的所有问题,其中ID不等于'actionsTable'中的任何'action'值 - 从而给我'顶级'问题集?

我知道我可以使用两个MySQL查询在PHP中执行此操作,1可以从'actionsTable'中选择所有数值,然后选择另一个来选择问题

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

该数据库的设计应规范化,但也要动态化,例如:管理团队可以使用管理页面添加/删除问题,答案和操作。

1 个答案:

答案 0 :(得分:2)

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

这会加入两者,保留questionTable中的所有值,并仅显示action字段中actionsTable中没有匹配的值。