我目前正在测验网站上工作。Mysql:知道我们不想要特定ID的数据库获取结果
我有一个约数据库。 1000个问题 - 但数据库将逐周增长。
每天,玩这个测验的每个用户都会随机得到5个问题。
问题是我不希望单个用户在两个不同的日期得到相同的问题2次。
我存储的用户的所有回答问题的历史,这样我就可以知道用户ID:1已经回答了答案ID:4质疑ID:6日期YYYY-MM-DD
基本上:
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
OR(容易)
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,查询会杀死我的服务器,不是吗?
有没有什么办法让我为我的用户随机获得5个问题,因为我知道问题的所有ID都已经回答了,并且确定查询不会对我的服务器太难处理?
在此先感谢!
如果你关心的是查询的长度,你可以缩短它的“NOT IN()”概念:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_not -在 – Igor 2011-05-25 15:14:41