我正在更改一个php插件,并且很难从数据库中获取数组的排序。截至目前,我喜欢它:
order by LENGTH(name), name
让我接近但不对劲。输出如下:
8.2-11
8.2-12
8.2-13
8.2-14
8.2-13-A
我理解,因为8.2-13-A
比8.2-13
长,所以它会在最后。如何忽略-A
或-B
,以便两个8.2-13
相互匹配?
答案 0 :(得分:0)
您可以尝试使用以下内容找到-
符号的最后一次出现:
LENGTH(name) - LOCATE("-", REVERSE(name))
有了这些信息,应该可以只使用原始字符串的子字符串,如:
ORDER BY LENGTH(SUBSTRING(name, (LENGTH(name) - LOCATE("-", REVERSE(name))))), SUBSTRING(name, (LENGTH(name) - LOCATE("-", REVERSE(name))))
但是我很确定这会对性能造成严重影响。
使用stored procedure
实现解决方案或者直接在php中执行此操作可能更好。