短数据库架构:
我需要为用户找到符合所有规则的游戏:
我使用PostgreSQL。
答案 0 :(得分:0)
我正在编写这个代码与SQL Server,但它应该在Postgres中工作。如果没有,差异应该是最小的。
此解决方案应该可行(我没有在此安装Postgres),但您可能希望针对大型数据集进行优化;使用索引,统计等...(通常)。
SELECT DISTINCT games.game_id FROM games INNER JOIN cards ON games.game_id = cards.game_id WHERE games.current_player_id is NULL and games.game_id in (SELECT DISTINCT game_id FROM GAME_VIEWS WHERE user_id != 666) and cards.author_id != 666 GROUP BY games.game_id ORDER BY cards.created_at DESC
再次,将“666”与实际ID交换。 希望它有所帮助!
答案 1 :(得分:0)
我认为这是最明确的解决方案。使用适当的索引,性能应该是合理的,但如果游戏数量达到数百万,则不能很好地扩展。如果发生这种情况,提高性能的一种方法是将最后一个card_id存储在游戏级别。
select game_id
FROM game g
WHERE g.current_player is null
AND not exists (select 0 from game_view gv
where gv.user_id = v_my_user_id and gv.game_id = g.game_id)
AND not exists (select 0 from
(select author_id from cards c where c.game_id = g.game_id order
by created_at LIMIT 1)
t1 where t1.author_id = v_my_user_id)