MySQL字段按照特定规则排序

分享一下数据库字段排序需求不是按照自然的顺序进行升序排序;

需求:工单状态,按照生产中>挂起>待生产>已完成进行排序。

解决方法:

1、工单状态枚举对应可以设置为:

生产中:10  , 挂起: 20:  ,待生产: 30 , 已完成 :40

数据库where 条件后面可以设置为:order by order_status asc。

这种方法是最简单,但是很多时候,工单状态对应枚举值已经设置好了,不能随意修改,无法按照现有状态去升序降序。

以下工单状态对应枚举是:

待生产:10  ,挂起: 20  ,生产中: 30, 已完成 : 40

2、可以用case when的方式

SELECT
	a.*, c.product_name 
FROM work_order a LEFT JOIN product c ON a.product_code = c.product_code AND c.del_flag = 0 
WHERE
	a.del_flag = 0  ORDER BY
	a.audit_status ASC,
  (CASE  WHEN a.order_status =30 THEN 1
	WHEN a.order_status =20 THEN 2
	WHEN a.order_status =10 THEN 3 
	WHEN a.order_status =40 THEN 4 
	ELSE 5
  END) ASC,
	a.start_time ASC; 

这样也是可以进行排序

3、采用field方式

SELECT
	a.*, c.product_name 
FROM work_order a LEFT JOIN product c ON a.product_code = c.product_code AND c.del_flag = 0 
WHERE
	a.del_flag = 0  ORDER BY
	a.audit_status ASC,
   field(a.order_status,30,20,10,40) ,
	a.start_time ASC; 

这个也可以进行排序,不过貌似这种方式只能作用于MySQL数据库。别的数据库貌似不行

 

posted @ 2024-02-22 11:07  多多指教~  阅读(107)  评论(0编辑  收藏  举报