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

标签 mysql

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

我有一个大约的数据库。 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/

相关文章:

mysql - 根据时间戳更新类似行

mysql - 创建 mysql 过程时出现错误 1064

php - Symfony 3.0 表单发布

php - 强制关闭 PHP、MySQL 和 SQLite 的 Android 登录和注册

php - 使用枚举数据类型将 excel 文件导入数据库 - 陷入困境

PHP mysql 查询不起作用

python - 我怎样才能在sql查询中转义这个字符串?

php - Mysql 不正确的字符串值

mysql - 同时获取2个相同的字段

jquery - 带有 UNION order by 问题的 sql 查询