我有一个MySQL数据库中程序的版本号表,组织如下:
versionnumber
----
1.4.0
1.5.0
1.6
1.6.1
1.6.2
1.7DevBuild1
1.7DevBuild2
1.7DevBuild3
1.7
1.8
我查看了如何通过MySQL查询中的点数版本编号,并在其他地方找到了非常有创意的解决方案。
SELECT *
FROM versions
ORDER BY INET_ATON(SUBSTRING_INDEX(CONCAT(versionnumber,'.0.0.0'),'.',4))
这可以通过对版本号进行排序,就好像它是INET_ATON中的IP地址一样。有用。有点。它正确地组织版本号,但它不识别Dev版本,而是将它们放在顶部并忽略它们,因为它们包含文本,IP地址不应包含。
1.7DevBuild1
1.7DevBuild2
1.7DevBuild3
1.4.0
1.5.0
1.6
1.6.1
1.6.2
1.7
1.8
所以我有了一个想法:用任何东西替换所有字母a-z,这样它只包含数字和点。但是MySQL无法替换RegExp。有没有其他方法或我必须在PHP中对返回的数组进行排序?
现在,有人可能会建议将“DevBuild3”更改为“.3”,但是那些寻找旧版本的用户会看到“.3”而不是“DevBuild3”。
答案 0 :(得分:3)
如果您可以将versionnumber
拆分为两列versionnumber
和versionsuffix
,则可以使用:
ORDER BY INET_ATON(SUBSTRING_INDEX(CONCAT(versionnumber,'.0.0.0'),'.',4)), versionsuffix