我正在寻找解决以下要求的最佳方法。这里的“最佳”意味着性能胜过“漂亮”的设计,我不怕丑陋而且高效的设计。
以下是限制因素:
Player
。我希望最多只有20k玩家。Game
- 这是一个大约500个游戏的列表。一旦游戏进入游戏,游戏就不会改变,但偶尔也会增加游戏。 Player
和Game
之间的关系如下:玩家要么玩游戏要么不玩游戏,并且每个游戏都有技能(值为1到5)。 / LI>
现在这里真的让我感到头疼:我希望能够通过指定多个Player
,最小技能和最大技能来搜索多个Game
。所以有可能,我有这500个游戏,都是由OR组成的,这使得查询速度非常快。我的方法是我应该以某种方式摆脱OR并用AND替换它们,但是如果有人不寻找特定的Game
,这意味着他正在寻找玩家的玩家或者不玩那个特定的游戏(因为用户对其他游戏感兴趣)。
我真的希望我错过了一些明显的或一些技巧,以防止我在每个搜索请求中都有数百个OR-Clauses ...
我尝试使用Parse(因此是标记)并收到错误:{"code":154,"message":"too many $or clauses"}
答案 0 :(得分:0)
Player
和Game
之间的关系将是另一个表格,例如Player_Game
列的内容如下:
因此,如果您希望能够通过指定单个游戏,最小技能和最高技能来搜索多个玩家,那么SQL查询将是:
select player_id
from player_game
where game_id = {GAME_ID}
and skill >= {MIN_SKILL}
and skill <= {MAX_SKILL};
但是,如果用户可以选择多个游戏,那就更难了。我可能会将选定的游戏保存到某种临时表中,然后查询,而不是使用多个OR
或大IN
列表构建查询:
select player_id
from player_game
where game_id in (select game_id from temp_games_list)
and skill >= {MIN_SKILL}
and skill <= {MAX_SKILL};