我想构建一个系统,用户可以在其中提交测验问题,用户也可以对这些问题进行评分。
有两个与我的问题有关的表:
要向用户提供需要评分的问题,我需要一个MySQL查询,并收到一个问题:
编辑:我找到了解决方法,请看底部的编辑。
我尝试了以下查询:
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!=@UserID
ORDER BY q.id
LIMIT 1
该查询什么也不返回。 问题表包含一些未验证的问题。验证表为空。
我知道错误出在LEFT JOIN验证v ON v.question_id = q.id和v.user_id!=@UserID部分之内,但是我不知道如何将自己的意愿翻译成MySQL。 >
编辑:我找到了解决我问题的解决方案:
set @UserId=5;
SELECT q.id, q.question, q.correct_answer, q.wrong_answer1, q.wrong_answer2 FROM question q
WHERE NOT EXISTS
(SELECT * FROM validation v WHERE v.user_id=@UserID AND q.id = v.question_id)
AND q.validated = 0 AND q.user_id!=@UserId
但是,我读到这种方法对性能非常不利。 有更高效的方法吗?
答案 0 :(得分:1)
您必须在v.user_id中检查是否为空,因为没有条目。 此查询有效:
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