复杂的mySql排序

时间:2014-07-16 16:21:21

标签: mysql sql-order-by

我有一张产品表。

他们的身份对于母亲来说是12345,对于孩子来说是12345_1,12345_2 ......

我想对他们进行排序,以便让母亲为desc,然后是孩子asc:

12345
12345_1
12345_2
12345_3
12345_4
12344
12344_1
12344_2
12344_3
12344_4
12340
12340_1
12340_2
12340_3
12340_4

我如何根据条款构建我的订单?

非常感谢

2 个答案:

答案 0 :(得分:0)

您可以使用SUBSTRING_INDEX来确定下划线前后的部分:

ORDER BY SUBSTRING_INDEX(id, '_', 1) DESC, 
         IF(LOCATE('_', id), SUBSTRING_INDEX(id, '_', -1), '') ASC

DEMO

答案 1 :(得分:0)

这适用于您的样本数据集:

select your_column
from your_table
order by cast(substring_index(your_column,'_',1) as signed integer) desc, 
  your_column asc