我有一个名为用户的列。我有这样的字段:user1、user2、...、user10、user11、user12、user20。但字段并不总是由用户开头
我想对这些字段进行向上排序,即我正在执行以下查询:
SELECT * FROM table ORDER BY user ASC
该查询返回: 用户1、用户10、用户11、用户12、用户2、用户20
我想要的排序如下: 用户1、用户2、用户11、用户12、用户20
我该如何进行这种排序?我使用的编程语言是 php
最佳答案
最好添加另一列包含用户的位置,然后按该列排序。但是,如果您无法更改表结构,则像这样的查询应该以正确的顺序返回行:
SELECT
tablename.*
FROM
tablename
ORDER BY
SUBSTR(user,
LEAST(
CASE WHEN LOCATE('0', user)>0 THEN LOCATE('0', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('1', user)>0 THEN LOCATE('1', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('2', user)>0 THEN LOCATE('2', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('3', user)>0 THEN LOCATE('3', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('4', user)>0 THEN LOCATE('4', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('5', user)>0 THEN LOCATE('5', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('6', user)>0 THEN LOCATE('6', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('7', user)>0 THEN LOCATE('7', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('8', user)>0 THEN LOCATE('8', user) ELSE LENGTH(user) END,
CASE WHEN LOCATE('9', user)>0 THEN LOCATE('9', user) ELSE LENGTH(user) END
)) + 0
请参阅 fiddle here .
关于php - mysql 表中的字段向上排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20970096/