1
cye3s 2017-03-28 16:19:56 +08:00 3
oracle 我知道, order by decode ,然后搜索到 MySQL 的, ORDER BY FIND_IN_SET(FieldName,"高,中,低")
|
3
debye 2017-03-28 16:35:10 +08:00
可以是可以,但是您这个数据库设计是不是有点问题
|
4
Reign 2017-03-28 16:46:28 +08:00 1
这个数据库设计得真让人呕心沥血,新建一个字段啊, tinyint , 3 、 2 、 1 代表对应的三个值,写个脚本替换到这个字段就行了呗
|
5
qiayue 2017-03-28 17:00:57 +08:00
为了程序快,增加一个字段,再加上索引
|
7
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='低' |
8
Braid OP @flyingghost 你这个方法也可以。。。赞一个
|
10
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 |
11
ApizzaTeam 2017-03-28 18:02:49 +08:00
@Reign 确实应该这样,数据库设计的问题
|
12
kevinzhwl 2017-03-28 19:40:57 +08:00
邪路:统一变成“ 10 高”,“ 20 中”,“ 30 低”
|
14
flniu 2017-03-28 20:28:19 +08:00
1 楼的方案是奇技淫巧,不改变现有数据模型的临时方案可以用这个。
长期的方案是把字段改成有序的数值类型或枚举类型。 |
15
Mitt 2017-03-29 03:03:12 +08:00
10L 的方法 +1
|
16
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 返回值? |