如何对MYSQL查询进行排序,以按字母顺序显示,最后是数字,不包括单词"在排序


How to sort MYSQL query to display alphabetically, with numbers last, and not including the word "The" in sort

基本上我有一个PHP MYSQL查询返回16项。其中15个以字母a - z开头,一个以数字开头(产品名称为"3d Star Gazer")。在常规查询中,按字母顺序排序显示首先以数字开头的这一项。我希望列表按字母顺序排序,最后显示3d占星器。

这可能吗?

SELECT t1.id, t2.name, t2.manufacturer
FROM db.t1
  LEFT JOIN db.t2 ON t1.id = t2.id
WHERE year = '2011'
ORDER BY t2.name ASC

我看到这个链接:排序MySQL结果按字母顺序,但与数字最后,但解决方案不适合我…

作为第二个问题,有没有可能在排序中不包含单词"the"?例如,一个游戏叫做"The guess game",我希望它按照"G"排序,而不是"T"。

使用IF()运算符并添加两列来控制排序顺序:

SELECT t1.id, t2.name, t2.manufacturer,
   IF(LEFT(t2.name, 1) BETWEEN '0' AND '9', 2, 1) as sortOrder1,
   IF(t2.name LIKE 'The _%', SUBSTRING(t2.name FROM  5), t2.name) as trimmedName
FROM db.t1
   LEFT JOIN db.t2 ON t1.id = t2.id
WHERE year = '2011'
ORDER BY sortOrder1, trimmedName;

LIKE操作符模式中的下划线匹配任何单个字符,并用于确保返回的子字符串不为空。

如果您不希望在最终输出中出现额外的列,请将上面的select语句包装在另一个语句中:

SELECT id, name, manufacturer FROM ([select statement above]) a;

查看结果

将MySQL结果按字母顺序排序,但以数字排在最后

特别注意按大小写排序

关于"the"的提取,我相信你可以在

的行中做一些事情。
 trim( replace( name, 'The','') ) as name_order

,然后在此基础上结合链接答案中提到的按大小写排序。

您可以创建一个联合首先选择以字母开头的值然后在第二个查询中选择以数字开头的值

(select .... order by <<letter>>) union (select ... order by <<number>>)