Mysql 仅显示其他表中不存在特定变量组合的表中的结果?

Mysql 仅显示其他表中不存在特定变量组合的表中的结果?,mysql,Mysql,我想建立一个系统,在这个系统中,用户可以提交测验问题,用户也可以对这些问题进行评分 有两个表格与我的问题相关: Question,其中包含一个questionID,一个来自 提交问题,一个正确答案,一个错误答案,另一个 回答错误,且问题出现时布尔值设置为true 在验证过程中幸存下来。 验证,其中包含验证问题的questionID、用户验证问题的UserID和验证0, 1或2取决于用户对问题的评分。 为了给用户提供需要评分的问题,我需要一个MySQL查询,通过该查询我收到一个问题,即: 尚未通过

我想建立一个系统,在这个系统中,用户可以提交测验问题,用户也可以对这些问题进行评分

有两个表格与我的问题相关:

Question,其中包含一个questionID,一个来自 提交问题,一个正确答案,一个错误答案,另一个 回答错误,且问题出现时布尔值设置为true 在验证过程中幸存下来。 验证,其中包含验证问题的questionID、用户验证问题的UserID和验证0, 1或2取决于用户对问题的评分。 为了给用户提供需要评分的问题,我需要一个MySQL查询,通过该查询我收到一个问题,即:

尚未通过验证bool=false 不是由请求它的用户创建的 尚未由请求它的用户验证 结果列表中的第一个问题是这些因素 编辑:我找到了一个解决方案,看看底部的编辑

我尝试了以下查询:

设置@UserId=5; 选择q.id、q.question、q.correct\u answer、q.error\u answer1、q.error\u answer2 来自问题q 左连接验证v ON v.question_id=q.id 其中q.validated=0 和q.user\u id=@用户ID 和v.user\u id=@用户ID 按q.id订购 限制1 我排除了已经通过验证的问题,其中q.validated=0。 我确定这是结果列表中的第一个问题,q.id限制为1 我排除了使用q.user_id请求的用户提出的问题=@用户ID 但是,此查询不返回任何内容。 问题表包含一些未验证的问题。验证表为空

我知道错误在v.question\u id=q.id和v.user\u id上的左连接验证v中的某个地方=@用户ID部分,但我不知道如何将我的遗嘱翻译成MySQL

编辑:我找到了解决问题的方法:

设置@UserId=5; 从问题q中选择问题id、问题q、正确答案q、错误答案q、错误答案q 不存在的地方 从validation v中选择*其中v.user\u id=@UserID和q.id=v.question\u id q.validated=0和q.user\u id=@用户ID 但是,我了解到这种方法对性能非常不利。
是否有更高性能的方法?

您必须在v.user\u id中检查null,因为没有条目。 此查询可用于:

set @UserId=5;
SELECT q.id, q.question, q.correct_answer, q.wrong_answer1, q.wrong_answer2
FROM question q 
LEFT JOIN validation v ON v.question_id=q.id 
WHERE q.validated = 0 
AND q.user_id!=@UserId 
AND v.user_id is null or v.user_id!=@UserId
ORDER BY q.id 
LIMIT 1

你好谢谢你的贡献。我应用了它,一开始它似乎是有效的,但后来我意识到,这种方法并不排除已经由用户验证的返回问题。我应该在查询中更改什么以排除已经由用户验证过一次的问题?该查询排除验证为0的问题。看到这个请用不工作的数据更新SQLFIDLE也许你误解了我,我不是指验证布尔值。我的帖子说:为了给用户提供需要评分的问题,我需要一个MySQL查询,通过它我收到一个问题:-尚未通过验证bool=false-不是由请求它的用户提出的-尚未由请求它的用户验证-结果列表中的第一个问题包含这些因素注意第三点:尚未由请求它的用户验证。我找到的性能不太好的解决方案可以做到这一点。然而,你的建议还没有,那么我还是不明白你的意思。请在sql FIDLE中提供表、示例数据和预期结果,我会提供帮助。假设用户id为5。他给问题ID为3的问题评分为2,因此验证表更新为用户ID:5,问题ID:3,评分:2。现在,这个问题还没有通过验证过程,所以它仍然在需要验证的问题库中。validation bool=0现在,当用户id为5的用户请求另一个问题进行评分时,我不希望我的查询返回一个已经被他评分的问题。我的查询性能不佳,但你的查询性能不佳。我想我说得再清楚不过了。所以我希望你能理解。