用连字符剪切的排序表id(php/mysql)

hlswsv35  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(284)

我有一个mysql表,我想以递减的方式显示它。问题是id被破折号打断了。。。所以mysql不理解我的请求。

SELECT * FROM table WHERE id ORDER BY id DESC

结果

20633-18489
184945-190028
183661-188782
1575-1610

但我要这个订单

184945-190028
183661-188782
20633-18489
1575-1610

php的解决方案是什么?

hwamh0ep

hwamh0ep1#

在sql语句中,我们可以执行以下操作:

ORDER BY id + 0 DESC

或者这个:

ORDER BY SUBSTRING_INDEX(id,'-',1) + 0 DESC

“这个” + 0 “”将导致在数值上下文中对其前面的字符串求值。它将返回一个数字。然后按数值排序。
作为示范

SELECT t.id
     , t.id + 0 AS id0
     , SUBSTRING_INDEX(t.id,'-',1)+0 AS id1
  FROM ( SELECT '184945-190028' AS id
         UNION ALL SELECT '183661-188782'
         UNION ALL SELECT '20633-18489'
         UNION ALL SELECT '1575-1610'
       ) t
 ORDER BY t.id + 0  DESC

退货

id                id0     id1
-------------  ------  ------
184945-190028  184945  184945
183661-188782  183661  183661
20633-18489     20633   20633
1575-1610        1575    1575

注意:这只是订购的一部分 id 在冲刺之前。这并没有指定在前导部分“匹配”的order id值将返回什么。mysql可以任意顺序返回这两个。

456-42
456-321

我们可以在ORDERBY子句中添加更多表达式,使这些表达式的顺序具有确定性。

jgovgodb

jgovgodb2#

你要找的是 REPLACE() 功能
因此,您的查询如下所示:

SELECT *,  REPLACE(id, '-' , '') AS sortable_id  WHERE id ORDER BY sortable_id DESC

相关问题