gpt4 book ai didi

MySQL : Get results from DB knowing that we don't want to get specific ids

转载 作者:行者123 更新时间:2023-11-29 03:12:20 27 4
gpt4 key购买 nike

我目前正在开发一个测验网站。

我有一个大约的数据库。 1000 个问题 - 但数据库会一周又一周地增长。

每天,每位参加测验的用户将随机获得 5 个问题。

问题是我不希望单个用户在两个不同的日期两次遇到相同的问题。

我正在存储用户回答的所有问题的历史记录,因此我可以知道用户 id:1 已在日期 YYYY-MM-DD 回答了问题 id:4 的答案 id:4

基本上:

entry_id | user_id | question_id | answer_id | good | date

所以当我随机得到 5 个问题给用户时,我有两个选择:

SELECT question, question_id FROM questions WHERE question_id != 'X' AND question_id != 'Y' AND question_id != 'Z' ORDER BY RAND() LIMIT 0,5

或(更简单)

SELECT question, question_id FROM questions WHERE question_id NOT IN(X,Y,Z)

我的问题:

假设我的用户到目前为止已经回答了 500 个问题(100 天的事件)。我给他新问题的查询会非常长

... NOT IT({huge list of ids for which the user has already answered})

... question_id != 'A' AND question_id != 'B' and so on and so on.

我担心的是,随着时间的推移,我的查询会变得非常慢。想象一下我必须为他回答 5 个问题的用户,知道他已经回答了 5000 个问题,查询会杀死我的服务器,不是吗?

有什么方法可以让我通过知道所有问题的 ID 都已经回答并确保查询不会太难处理我的服务器来为我的用户随机获取 5 个问题?

提前致谢!

最佳答案

NOT EXISTS 在这种情况下可能会更好地为您服务。

SELECT q.question, q.question_id
FROM questions q
WHERE NOT EXISTS(SELECT NULL
FROM answers a
WHERE a.question_id = q.question_id
AND a.user_id = 'YourUser')
ORDER BY RAND() LIMIT 0,5

关于MySQL : Get results from DB knowing that we don't want to get specific ids,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6126666/

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