我有一个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的解决方案是什么?
hwamh0ep1#
在sql语句中,我们可以执行以下操作:
ORDER BY id + 0 DESC
或者这个:
ORDER BY SUBSTRING_INDEX(id,'-',1) + 0 DESC
“这个” + 0 “”将导致在数值上下文中对其前面的字符串求值。它将返回一个数字。然后按数值排序。作为示范
+ 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可以任意顺序返回这两个。
id
456-42 456-321
我们可以在ORDERBY子句中添加更多表达式,使这些表达式的顺序具有确定性。
jgovgodb2#
你要找的是 REPLACE() 功能因此,您的查询如下所示:
REPLACE()
SELECT *, REPLACE(id, '-' , '') AS sortable_id WHERE id ORDER BY sortable_id DESC
2条答案
按热度按时间hwamh0ep1#
在sql语句中,我们可以执行以下操作:
或者这个:
“这个”
+ 0
“”将导致在数值上下文中对其前面的字符串求值。它将返回一个数字。然后按数值排序。作为示范
退货
注意:这只是订购的一部分
id
在冲刺之前。这并没有指定在前导部分“匹配”的order id值将返回什么。mysql可以任意顺序返回这两个。我们可以在ORDERBY子句中添加更多表达式,使这些表达式的顺序具有确定性。
jgovgodb2#
你要找的是
REPLACE()
功能因此,您的查询如下所示: