MySQL按版本号+名称排序

时间:2014-11-08 23:03:50

标签: php mysql

我有一个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”。

1 个答案:

答案 0 :(得分:3)

如果您可以将versionnumber拆分为两列versionnumberversionsuffix,则可以使用:

ORDER BY INET_ATON(SUBSTRING_INDEX(CONCAT(versionnumber,'.0.0.0'),'.',4)), versionsuffix