我有一個查詢,我使用一個相當密集的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你最近的編輯讓你的問題不可讀。 –
檢查編輯。 –