我正在尝试按升序对数据进行排序。以下是我的结果现在的显示方式:
1:1
1:10
1:2
1:3
1:4
1:5
1:6
1:7
1:8
1:9
2:1
相反,我希望它们像这样:1:1, 1:2, 1:3, 1:4, 1:5, 1:6, 1:7, 1:8, 1:9, 1:10、2:1。
目前,我的方法是将 :
替换为 .
。通过在下面的查询中添加 +0
,我认为它只会将我的值视为带小数位的整数。对我在这里缺少的内容有任何反馈吗?
"SELECT myverses.*
FROM myverses
INNER JOIN biblebooks ON myverses.book = biblebooks.name
ORDER BY biblebooks.id ASC, REPLACE(myverses.reference, ':', '.')+0 ASC;";
最佳答案
1.2
与 1.20
相同,这就是它高于 1.10
的原因。
您可以使用:
ORDER BY biblebooks.id ASC,
SUBSTRING_INDEX(myverses.reference, ':', 1)*1000 + SUBSTRING_INDEX(myverses.reference, ':', -1) ASC
这会将 1:1
转换为 1001
、1.10
转换为 1010
、1.2
code> 到 1002
,这样它们就会正确排序。
只需使乘数大于一章中的最大节数即可。
关于MySQL:按节数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49417307/