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