我有一个查询,我使用一个相当密集的WHERE IN子句来获取与玩家相关的ID列表。在FIND_IN_SET中使用MySQL IN条件
SELECT p.name,
0a.stat_value
FROM leaderheadsplayers p
LEFT JOIN leaderheadsplayersdata_alltime 0a
ON 0a.player_id = p.player_id
AND 0a.stat_type = 'kills'
WHERE p.player_id IN
(SELECT player_id
FROM
(SELECT 0a.player_id
FROM leaderheadsplayersdata_alltime 0a
WHERE 0a.stat_type = 'kills'
ORDER BY 0a.stat_value DESC LIMIT 0,
20
) 1a
)
的问题是,我想用FIND_IN_SET没有再做从IN子句密集的查询,以保持这些ID的从IN子句的顺序在我的最终结果。 事情是这样的:
SELECT p.name,
0a.stat_value
FROM leaderheadsplayers p
LEFT JOIN leaderheadsplayersdata_alltime 0a
ON 0a.player_id = p.player_id
AND 0a.stat_type = 'kills'
WHERE p.player_id IN
(SELECT player_id
FROM
(SELECT 0a.player_id
FROM leaderheadsplayersdata_alltime 0a
WHERE 0a.stat_type = 'kills'
ORDER BY 0a.stat_value DESC LIMIT 0,
20
) 1a
)
ORDER BY FIND_IN_SET(p.player_id, result_from_in_clause)
这是我的电流输出:
player_id | stat_value
3 | 304
5 | 507
4 | 208
这就是我想:
player_id | stat_value
5 | 507
3 | 304
4 | 208
W命令?你在子查询中定义的那个? – GurV
@Rovin你最近的编辑让你的问题不可读。 –
检查编辑。 –