请教一个 mysql 中文排序的问题,就是某一列是有“高”、“中”、“低”三种值,然后我怎么才能 orderby 出高中低的效果?

2017-03-28 16:11:02 +08:00
 Braid
请教一个 mysql 中文排序的问题,就是某一列是有“高”、“中”、“低”三种值,然后我怎么才能 orderby 出高中低的效果?目前使用 CONVERT( FieldName USING gbk ) COLLATE gbk_chinese_ci desc 排序结果是高低中。。。求 v2 大牛知道
3159 次点击
所在节点    程序员
16 条回复
cye3s
2017-03-28 16:19:56 +08:00
oracle 我知道, order by decode ,然后搜索到 MySQL 的, ORDER BY FIND_IN_SET(FieldName,"高,中,低")
Braid
2017-03-28 16:30:04 +08:00
@cye3s 可以。感谢!
debye
2017-03-28 16:35:10 +08:00
可以是可以,但是您这个数据库设计是不是有点问题
Reign
2017-03-28 16:46:28 +08:00
这个数据库设计得真让人呕心沥血,新建一个字段啊, tinyint , 3 、 2 、 1 代表对应的三个值,写个脚本替换到这个字段就行了呗
qiayue
2017-03-28 17:00:57 +08:00
为了程序快,增加一个字段,再加上索引
Braid
2017-03-28 17:10:02 +08:00
@Reign 我是接锅虾,新建的话要改的地方目测会很多,懒~
flyingghost
2017-03-28 17:10:31 +08:00
select * from user where bigger='高'
union
select * from user where bigger='中'
union
select * from user where bigger='低'
Braid
2017-03-28 17:14:26 +08:00
@flyingghost 你这个方法也可以。。。赞一个
cncqw
2017-03-28 17:27:19 +08:00
@Braid 这也叫可以?明明只需要查一次结果被你查了 3 次
magicdawn
2017-03-28 17:51:44 +08:00
select case
when col = '高' then 3
when col = '中' then 2
when col = '低' then 1
end as priority
from ...
order by priority desc
ApizzaTeam
2017-03-28 18:02:49 +08:00
@Reign 确实应该这样,数据库设计的问题
kevinzhwl
2017-03-28 19:40:57 +08:00
邪路:统一变成“ 10 高”,“ 20 中”,“ 30 低”
flniu
2017-03-28 20:25:41 +08:00
@Braid 而且 union 不保证结果顺序,顺序这次符合你的预期只是巧合。
flniu
2017-03-28 20:28:19 +08:00
1 楼的方案是奇技淫巧,不改变现有数据模型的临时方案可以用这个。
长期的方案是把字段改成有序的数值类型或枚举类型。
Mitt
2017-03-29 03:03:12 +08:00
10L 的方法 +1
nikubenki
2017-03-29 09:17:32 +08:00
DELIMITER $$

USE `数据库名`$$

DROP FUNCTION IF EXISTS `my_translate`$$

CREATE DEFINER=`root`@`%` FUNCTION `my_translate`(param VARCHAR(100)) RETURNS VARCHAR(100) CHARSET utf8
BEGIN
SET param = REPLACE(param,'低','a');
SET param = REPLACE(param,'中','b');
SET param = REPLACE(param,'高','c');
RETURN param;
END$$

DELIMITER ;


然后 order by 这个 function 返回值?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/350941

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX