SQL订单... ASC

时间:2014-10-28 12:56:47

标签: php mysql sql sorting sql-order-by

我的SQL查询有问题。我希望我的结果按升序排序,但问题是DB只根据第一个数字对结果进行排序,而逻辑上,2应该在19之前。例如。

这是我的请求和结果的屏幕截图,但根本没有:

SELECT * FROM mail WHERE titre LIKE '%$mot%' ORDER BY mail.titre ASC

Very bad sort...

我想要的是所有结果如下:1 2 3 4 5 ... 101 102 103 ... 8845 8850 ...依此类推。

你对这个问题有所了解吗?

问候。

3 个答案:

答案 0 :(得分:3)

不会这样做。您有字符串/ char []列,并且您正在寻找仅适用于数字的订单。 如果可能,您需要将此列转换为数字。

你可以使用演员:

CAST(mail.titre,int)

示例如下: Converting text column to integer in MySQL

答案 1 :(得分:1)

我认为你的列被声明为char。所以DBMS按字符串值排序。您必须在sort子句中将值转换为int。

SELECT * FROM mail WHERE titre LIKE '%$mot%' ORDER BY convert(mail.titre, unsigned integer) ASC

答案 2 :(得分:1)

据我所知,该字段是一个varchar / text ...所以要正确排序它们你必须转换字段(如果可能的话)

示例:

SELECT * FROM mail WHERE titre LIKE '%$mot%' ORDER BY CAST(mail.titre AS int) ASC