mysql为单个用户获取所有未回答的问题

时间:2017-01-08 16:24:51

标签: mysql

我上传了我使用的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还没有完成任何问题。

感谢您提供的任何帮助

2 个答案:

答案 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

中删除了一些列