MySQL实现指定ID数据优先且按标题升序,其余数据同规则排序
实现特定ID记录前置并按标题排序的SQL方案
你当前的SQL语句SELECT * FROM table ORDER BY FIELD(ID,2,3) DESC, title ASC存在问题:FIELD(ID,2,3)会强制ID2排在ID3前面,完全忽略它们的title顺序,所以达不到你要的特定ID组内按title升序排列的效果。
要实现需求,核心逻辑是先把特定ID的记录归为一组放在最前面,组内按title升序排序;剩下的记录同样按title升序排序。用CASE表达式就能直接实现:
SELECT * FROM table ORDER BY CASE WHEN ID IN (2,3) THEN 0 ELSE 1 END, -- 标记特定ID组,让这组整体排在前面 title ASC;
用你的示例数据测试:
原数据:
- 1 Lisa
- 2 Hannah
- 3 Adam
- 4 Brian
执行上述SQL后,结果完全符合你的期望:
3 Adam(特定组内title升序排第一)
2 Hannah(特定组内title次之)
4 Brian(非特定组title升序第一)
1 Lisa(非特定组title次之)
内容的提问来源于stack exchange,提问作者SeaBass
相关产品推荐
相关产品推荐

