我上传了我使用的3个不同的表格,并且与此问题相关:http://sqlfiddle.com/#!9/796b2f/1
这就是我想要做的事情:
我想知道此用户未解答的问题(ID#39)。他列在登录表中。 surveyquestions 表包含所有问题。 completedsurveyquestions 表包含所有答案。这两个表加入 s.id 和 c.surveyquestionid 。哪位用户已回答在 c.userid 下找到的问题,并加入 l.id 。
这是我使用的SQL查询:
SELECT * FROM surveyquestions s
LEFT JOIN completedsurveyquestions c
ON s.id = c.surveyquestionid
LEFT JOIN logins l
ON INSTR(l.opensurveys, s.surveytype) > 0 #check if theres any open surveys for the user
WHERE l.id = 39
AND c.surveyquestionid IS NULL #makes sure the question isnt actually completed
可悲的是,只有在问题从未得到解答时,此查询才有效。如何进行查询以便它可以处理多个用户?在我的情况下,它应该显示所有问题,因为用户39还没有完成任何问题。
感谢您提供的任何帮助
答案 0 :(得分:0)
以下是我要为单个或多个用户做的事情:
<div ng-if="$ctrl.data | isValidObject">
由于架构/架构选择,这非常效率低下。你基本上必须在登录和问题之间做一个笛卡尔积,然后离开外连接看看哪些问题已经完成。您可以通过查看笛卡尔积的completedsurveyquestions表中是否没有相应的用户ID来查看用户尚未完成的问题。如果这是一个你会做很多的查询,你应该肯定重新审视您的架构和应用程序架构。
答案 1 :(得分:0)
SELECT sdata。*
,盖
FROM(选择s.surveytype,s.id sid,c.id cid,来自surveyquestions s的c.userid)
LEFT JOIN completedsurveyquestions c
ON s.id = c.surveyquestionid)sdata
加入登录l
on(INSTR(l.opensurveys,sdata.surveytype)&gt; 0
或INSTR(l.opensurveys,sdata.surveytype)= 0)
其中l.id = 39
plz检查一下,我只是从select
中删除了一些列