我正在建立一个保险报价系统,并提出了许多问题。我的问题存储在一个表(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
该数据库的设计应规范化,但也要动态化,例如:管理团队可以使用管理页面添加/删除问题,答案和操作。
答案 0 :(得分:2)
SELECT questionDescription FROM questionsTable
LEFT JOIN actionsTable ON questionsTable.questionId=actionsTable.action
WHERE actionsTable.action IS NULL
这会加入两者,保留questionTable中的所有值,并仅显示action字段中actionsTable中没有匹配的值。