我有一个拥有2000个游戏的数据库。每个游戏包含来自1-90的15个数字。
每次我在数据库中提交一个号码,我都希望我的结果更新,所以我总是看到最接近完成的游戏。 (一次只能观看50场比赛)。
我的数据库结构如下所示:
表:游戏
表:game_numbers
表:numbers_played
实施例: 表游戏包含游戏。每个游戏的15个数字(范围1-90)存储在 game_numbers 中,其中 game_id 标识游戏。表 numbers_played 包含已播放的1-90的随机数。
如何使用播放次数最多的50个游戏(表示game_numbers和numbers_played中存在的结果),记住效率和简单性?
答案 0 :(得分:1)
未经测试...
SELECT game_id, COUNT(*)
FROM game_numbers
WHERE number IN (SELECT number FROM numbers_played)
GROUP BY game_id
ORDER BY COUNT(*) DESC
LIMIT 50;
答案 1 :(得分:0)
创建一个“播放的数字”列(即非规范化字段,即可从“numbers_played”表中收集的信息的副本。
然后在该列上创建一个索引,如果你“按顺序”,MySQL可以使用索引来避免需要排序。
但是,请先查看是否存在性能问题。如果你不这样做,那么你将节省你自己的努力,如果你只是保持原样,系统将更加规范化,对多个表进行查询并按聚合“排序”。