gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:38:55 25 4
gpt4 key购买 nike

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

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

  • “问题”,包含问题ID、用户ID(来自提问者)提交问题),一个正确答案,一个错误答案,另一个错误答案和问题时设置为 true 的 bool 值通过了验证过程。
  • “验证”,其中包含验证问题的问题 ID、用户验证问题的用户 ID 和验证(0,1 或 2,具体取决于用户对问题的评分)。

为了向用户提供需要评分的问题,我需要一个 MySQL 查询,通过该查询我收到的问题是:

  • 尚未通过验证(validated bool = false)
  • 不是由用户请求的
  • 尚未由请求的用户验证
  • 包含这些因素的结果列表中的第一个问题

编辑:我找到了一个解决方案,请查看底部编辑。

我尝试了以下查询:

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
  • 我已使用 WHERE q.validated = 0 排除已通过验证的问题。
  • 我通过 ORDER BY q.id LIMIT 1 确保这是结果列表中的第一个问题
  • 我排除了用户通过 q.user_id!=@UserId 提出的问题

不过,这个查询没有返回任何内容。问题表包含一些未经验证的问题。验证表为空。

我知道错误位于 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

但是,我读到这种方法对于性能来说非常糟糕。有没有更高效的方法?

最佳答案

您必须检查 v.user_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

关于mysql - 仅显示表中的结果,其中其他表中不存在特定的变量组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57072593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com