【发布时间】:2022-01-18 17:48:00
【问题描述】:
我有一个这样的 game_players 表(为简洁起见,省略了其他列):
game_id user_id
1 1
1 3
2 1
2 2
2 4
我的目的是向已登录的用户显示他们所参与的游戏(例如,用户 2 应该只看到游戏 2)。
“where 2 in(select game_players.user_id from game_players)”位似乎不起作用,我得到了所有游戏的列表 - 包括用户 2 未参与的游戏。
select games.game_id as 'game_id',
games.date_game_started as 'date_started',
users.username as 'username',
users.permanent_id as 'permanent_id',
game_players.user_id as 'user_id'
from games
inner join game_players on games.game_id = game_players.game_id
inner join users on game_players.user_id = users.user_id
where 2 in(select game_players.user_id from game_players)
and games.game_active = 1
and game_players.current_turn = 1
group by(games.game_id)
order by field(game_players.user_id, 2) desc,
games.date_game_started asc
根据我的测试数据,我得到了这个结果集:
game_id date_started username permanent_id user_id
1 2021-12-15 13:33:17 userc userc 3
2 2021-12-15 13:35:20 Admin admin 1
我应该只获得第二行,因为用户 2 只参与游戏 2。
我承认我的 SQL 有点生疏了,请你帮忙?
【问题讨论】:
-
没有任何聚合函数的 group by 是没有用的。还添加来自用户和游戏的示例数据
-
'where 2 in(select game_players.user_id from game_players)' - 总是正确的,因此可能在 game_players.user_id = 2 是你需要的地方毫无意义。
标签: mysql join inner-join