У меня есть запрос, в котором я использую довольно интенсивное предложение WHERE IN, чтобы получить список идентификаторов, связанных с игроками.Использовать условие MySQL IN в FIND_IN_SET
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, не делая интенсивный запрос из пункта снова. Что-то вроде этого:
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 Ваше недавнее изменение оставило ваш вопрос непонятным. –
Проверьте изменения. –