MySql查询技巧

若状态为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虚拟属性对性能上影响不大,改动不大,且比较灵活,个人觉得可接受

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2023年Java面试宝典

您的鼓励是对我的肯定,共建希望

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值