让m(illi)g(ram)来到g(ram)之前

时间:2014-01-22 12:48:35

标签: mysql sorting sql-order-by

我需要对某些药品进行高级分类。

我选择的其中一个栏目就是力量。我想按照上升的强度订购,例如,在一个结果集中,我们可能会发现强度为500毫克和1克的产品。但是现在,500毫克总是在1克之后。如何理解mg小于g?我不允许将1 g更改为1000 mg,因为它是官方产品说明的一部分。

现在我正在使用ORDER BY `strength` + 0

2 个答案:

答案 0 :(得分:2)

首先出现mg排序:

ORDER BY strength rlike 'mg' desc, strength + 0
mysp中的

1,false为0,如果字符串匹配({em>包含)rlike,则mg返回true,所以这将在其他优势之前对所有毫克强度进行排序。

答案 1 :(得分:0)

为了使这个可扩展且更实用,你需要创建第二个表,比如UNITS:

UNIT | VALUE
mg   | 0.001
g    | 1
Kg   | 1000

然后,在表中创建第二列,UNIT - 使用外键进入UNITS,并从字符串中删除它,将值转换为数字。您可以稍后将它们连接起来进行提取。

然后,您可以加入您的"参考"表和订单很容易:

select concat(t.strength, t.unit)
  from your_table t
  join units u
    on t.unit = u.unit
 order by u.value, t.strength

如果您不做这样的事情,那么每当您更换表格时,您都必须更改您的ORDER BY子句,这将永远被遗忘。