MySQL:按节数排序

标签 mysql

我正在尝试按升序对数据进行排序。以下是我的结果现在的显示方式:

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.21.20 相同,这就是它高于 1.10 的原因。

您可以使用:

ORDER BY biblebooks.id ASC,
         SUBSTRING_INDEX(myverses.reference, ':', 1)*1000 + SUBSTRING_INDEX(myverses.reference, ':', -1) ASC

这会将 1:1 转换为 10011.10 转换为 10101.2 code> 到 1002,这样它们就会正确排序。

只需使乘数大于一章中的最大节数即可。

关于MySQL:按节数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49417307/

相关文章:

mysql - 一个数据库多个接口(interface)

sql - 如何更改临时表?

mysql - 在范围条件中使用值时出错

php - SQL 数据库或文件系统中的照片 (2012)

用于动态下拉菜单的javascript createelement

mysql - 使用内部连接查询 mysql 更新时出现语法错误

java - Android:单击提交按钮后将 'waiting' 字符串数据发送到数据库

php - Mysql数据库设计

mysql - 当我终止作业并再次运行时,Talend 作业截断记录

php - 当其中一个为空时,我无法减去两个不同的表