我有版本号的表在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查询,并在SO的其他地方找到了一个非常有创意的解决方案
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”。
如果你想这样做在MySQL,我认为你必须写一个UDF,用做内置函数繁重。将未排序的数据返回给PHP并使用'usort()'可能会更容易。 – Barmar 2014-11-08 23:08:24
这是一个潜在的解决方案。 – tomysshadow 2014-11-08 23:26:18