我需要对某些药品进行高级分类。
我选择的其中一个栏目就是力量。我想按照上升的强度订购,例如,在一个结果集中,我们可能会发现强度为500毫克和1克的产品。但是现在,500毫克总是在1克之后。如何理解mg
小于g
?我不允许将1 g
更改为1000 mg
,因为它是官方产品说明的一部分。
现在我正在使用ORDER BY
`strength`
+ 0
。
答案 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子句,这将永远被遗忘。