PHP按长度排序,但忽略字符


PHP order by length but ignore characters

我正在更改一个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-A8.2-13长,所以它会在最后。我怎么能忽略-A-B,这样两个8.2-13就在一起了?

您可以尝试使用以下内容来查找-符号的最后一次出现: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中实现是一个更好的主意。