添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

2. 自定义排序

自定义排序是根据自己想要的特定字符串(数字)顺序进行排序。 主要是使用函数 FIELD(str,str1,str2,str3,...)

MySQL 的自定义排序, str str1 str2 str3... 进行比较,并按照 str1,str2,str3... 的顺序输出,如果遇到 str null 或者不存在 str1,str2,str3... 中的情况的则序列为 0

select * from test order by field(value,'test1','test2','test3','test4') asc/desc

select * from test where value in('test1','test2','test3','test4') order by field(value,'test1','test2','test3','test4') asc/desc-- 保证只满足条件的进行排序

3. 按中文拼音字母排序

如果表字段使用的 GBK 编码的话,我们可以直接 order by value ,因为 GBK 本身就是按照拼音字母排序 ABCDEFGHIGK... ,当第一位相同的时候会比较第二位,以此类推。 如果表字段使用的 UTF-8 编码的话,通常我们都会的编码,这样我们可以使用 MySQL convert 方法开转换 gbk 进行排序。

select * from user ORDER BY CONVERT(name USING GBK) ASC;

我们可以从下图看出,这种配需方式没有将中文和英文结合起来一起排序,而是各自的排序。故而我们使用mysql的存储过程做到不管是用户的姓名为中文或是英文,都可以综合的排序,具体代码如下:

 1 DELIMITER $$  
 2 CREATE FUNCTION `fristPinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8    
 3 DETERMINISTIC  
 4 BEGIN   
 5     DECLARE V_RETURN VARCHAR(255);  
 6     DECLARE V_BOOL INT DEFAULT 0;  
 7     DECLARE FIRST_VARCHAR VARCHAR(1);  
 9     SET FIRST_VARCHAR = left(CONVERT(P_NAME USING gbk),1);  
10     SELECT FIRST_VARCHAR REGEXP '[a-zA-Z]' INTO V_BOOL;  
11     IF V_BOOL = 1 THEN  
12       SET V_RETURN = FIRST_VARCHAR;  
13     ELSE  
14       SET V_RETURN = ELT(INTERVAL(CONV(HEX(left(CONVERT(P_NAME USING gbk),1)),16,10),     
15           0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,     
16           0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,0xC8F6,
17                     0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1),     
18       'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z');    
19     END IF;  
20     RETURN V_RETURN;  
21 END$$  
22 DELIMITER; 
View Code

查询语句为:select fristPinyin(name) as pinyin_index,name from app_user ORDER BY fristPinyin(name) ASC ;

1)fristPinyin 函数只需要运行一次,后面直接操作查询语句即可,如果后面也一起运行会出现: [Err] 1304 - FUNCTION fristPinyin already exists

2) 由于汉语拼音没有以 'I','U','V','W' 开头的,所以转化的只有 'A',  'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'W', 'X', 'Y', 'Z'

三种排序对比结果:

在全栈的道路上,积极向上、成熟稳重、谦虚好学、怀着炽热的心向前方的走得更远。