如何在SQL中结合时间与布尔字段实现二次排序
你可以直接在ORDER BY子句中增加isDone作为第一排序条件,修改后的语句如下:
SELECT * FROM matches WHERE isVisible = 1 ORDER BY isDone ASC, schedule ASC
逻辑说明
- 第一排序优先级为
isDone升序:MySQL中BOOLEAN类型本质是TINYINT,isDone=0的数值小于isDone=1,所以所有未结束的赛事会统一排在结果前半段,已结束的赛事自动排在后半段 - 第二排序优先级为
schedule升序:相同isDone状态的赛事会按照原定的时间正序排列,和你之前的排序逻辑保持一致
如果需要兼容其他不支持BOOLEAN直接排序的数据库,也可以用CASE语句写通用版本:
SELECT * FROM matches WHERE isVisible = 1 ORDER BY CASE WHEN isDone = 1 THEN 1 ELSE 0 END ASC, schedule ASC
内容的提问来源于stack exchange,提问作者Evelyn Woodley
相关产品推荐
相关产品推荐

