MySQL如何對資料庫狀態值指定排序

2022-06-25 12:12:09 字數 1234 閱讀 4998

問題描述:有乙個業務表,其狀態值有以下幾種

0:"

待審批"

,1:"通過"

,2:"

不通過"

,3:"駁回"

,4:"

委託",

我的排序規則既不是 order by status desc 也不是 asc 

而是按照  待審批 > 駁回 > 委託 > 通過 >不通過 的順序排序

create table if not exists `test_process` (

`id` int(11) not null auto_increment,

`status` int(11) default 0,

`statusdesc` varchar(20) default '',

primary key (`id`)

) engine=innodb default charset=utf8 auto_increment=1;

insert into test_process (status,statusdesc) value (1,'pass');

insert into test_process (status,statusdesc) value (2,'not_pass');

insert into test_process (status,statusdesc) value (3,'callback');

insert into test_process (status,statusdesc) value (4,'entrust');

資料如下:

此時應當使用field函式:

select * from test_process order by field(status,0,3,4,1) asc;
輸出結果:

按照後面的值正序排列,無匹配的將會放在最前面(比如2)

倒序時候,依據值最前面的值的匹配行的放在最後面,無匹配狀態值將作為狀態值列表的最前面的狀態值(2)對應匹配行放在最後面

狀態值在資料庫中的檢索

對於關係型資料庫而言,針對表的檢索,一般來說,建立合適的索引就可以達到很好的檢索效果。這裡不包含表設計的合理與否 比如像狀態列這樣可選擇性非常低的值,該如何檢索?其實這個已經不是關係型資料庫擅長的方面了。但是如果出於歷史或者許多不可抗拒的原因,我們還得在關係表中進行優化,該咋辦?一般來說,就是建立靜...

mysql對資料庫的date字段值進行逐個遞增

先把日期修改為統一的時間如 2019 01 01 00 00 00,update table set date 2020 09 01 09 30 00 然後執行sql語句,實現date字段值進行逐個遞增,每乙個值增加10秒,sql語句如下 set rownum 0 update comm sh da...

Mysql 對資料庫的操作

mysql 基本概念 mysql檔案系統,用來儲存資料,然後通過sql語句來獲取資料 er模型圖 mysql 免費的小型的資料庫,現在被oracle收購.oracle oracle公司收費的大型的資料庫.sqlserver 微軟公司收費中型的資料庫.db2 ibm公司收費的大型的資料庫.sybase...