若状态为0,1,2,3的字段在查询时需要状态为1的排到最前面,0在1后但2,3不动的,若直接用order by的话达不到效果
达不到效果是因为:
若按desc,那么会出现3,2,1,0->这种情况下违反了2,3不动的原则
若按asc,那么会出现0,1,2,3->这种情况违反了0在1之后的原则
解决办法:
1.改变数据库改状态字段的定义
2.使用一个用于排序的虚拟属性,如下面的tmp
SELECT deploy_state, (CASE deploy_state WHEN 0 THEN 3 WHEN 1 THEN 1 WHEN 3 THEN 2 END) AS tmp
FROM pc_page
ORDER BY tmp ASC;
不改变数据库状态字段的定义的好处(优点)
如:deploy_state页面发布状态(0:未发布,1:已发布,2:修改未发布,3:已下线)
1.这个是按页面生命周期状态顺序进行排列的,不修改可以更好理解
2.一般情况下0代表的是贬义,建议优先考虑
3.不会因为业务的变动而产生状态顺序错乱的问题,不便于理解,未来排序规则改变时也不会产生歧义
缺点是: 查询时需要添加如case的虚拟属性
综合来看,查询时添加case虚拟属性对性能上影响不大,改动不大,且比较灵活,个人觉得可接受