我正在尝试订购存储在MySQL表中的选项列表。问题是,结果是多种多样的,我希望它们有一种特定的显示方式。我一直在尝试ORDER BY子句中的SUBSTRING
和SUBSTRING_INDEX
函数,但是没有得到我之后的确切顺序..
我尝试排序的数据(以及我正在寻找的结果):
1 Colour Print (white base)
2 Colour Print (white base)
3 Colour Print (white base)
4 Colour Print (white base)
1 Colour Print (coloured base)
2 Colour Print (coloured base)
3 Colour Print (coloured base)
4 Colour Print (coloured base)
Embroidered (white base up to 5000)
Embroidered (coloured base up to 5000)
然而,我能得到的最接近的是:
1 Colour Print (coloured base)
2 Colour Print (coloured base)
3 Colour Print (coloured base)
4 Colour Print (coloured base)
1 Colour Print (white base)
2 Colour Print (white base)
3 Colour Print (white base)
4 Colour Print (white base)
Embroidered (coloured base up to 5000)
Embroidered (white base up to 5000)
我使用的查询是:
select * from options ORDER BY SUBSTRING(optionName, 4);
我也试过SUBSTRING_INDEX
,但这更加麻烦......
这是可能还是我应该承认失败?
答案 0 :(得分:3)
只要彩色中的c
来自w
之前的字母表中的白色,就不可能这样做。
好吧,除非你想要一个非常复杂的解决方案:
SELECT * FROM options ORDER BY
SUBSTRING(optionName, 4, 1),
SUBSTRING(optionName, 18, 1),
SUBSTRING(optionName, 1, 1)
如果您可以选择修改表格结构,我建议添加sortOrder列。