我的SQL查询有问题。我希望我的结果按升序排序,但问题是DB只根据第一个数字对结果进行排序,而逻辑上,2应该在19之前。例如。
这是我的请求和结果的屏幕截图,但根本没有:
SELECT * FROM mail WHERE titre LIKE '%$mot%' ORDER BY mail.titre ASC
我想要的是所有结果如下:1 2 3 4 5 ... 101 102 103 ... 8845 8850 ...依此类推。
你对这个问题有所了解吗?
问候。
答案 0 :(得分:3)
不会这样做。您有字符串/ char []列,并且您正在寻找仅适用于数字的订单。 如果可能,您需要将此列转换为数字。
你可以使用演员:
CAST(mail.titre,int)
答案 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