按预算从高到低或从低到高排序

时间:2018-03-15 05:40:56

标签: mysql sql database sql-order-by

从高到低:

$query="select * from sponsors order by budget DESC"; 

从低到高:

$query="select * from sponsors order by budget "; 

执行此查询时,它只按第一个数字排序。例如:

预算: 95,00,000 6,00,000 3,00,000 29,58,000 22,78,000

我做错了什么?

5 个答案:

答案 0 :(得分:1)

我认为您的列数据类型是char,因此请确保使用int数据类型作为列。

答案 1 :(得分:1)

解决此问题的“正确”方法是重新构建表并将预算拆分为两个字段,一个int和一个varchar,用于描述int引用的内容,例如: “p.a”或“正在进行”或“每月”或其他什么。这样,您就可以通过int字段正确地对数据进行排序。

在此期间,您应该能够通过从字段的数字部分中删除逗号然后将其转换为无符号整数来对数据进行排序:

SELECT *
  FROM sponsors
  ORDER BY CAST(REPLACE(budget, ',', '') AS UNSIGNED)

只要所有预算值都以可能包含或不包含逗号的数字开头,这应该有效。

答案 2 :(得分:0)

ANSI SQL中的ORDER BY(您没有指定特定的sql变体;这会有所帮助:-)取决于列定义。

如果你想按数值排序(而不是基于字符串 - 如果我们猜测,看起来你在这里有一个char / varchar / text列),你需要使用数值列类型,例如,INT,FLOAT,DECIMAL等。

换句话说,您需要告诉SQL(通过您的架构)您具体具有数字数据。基数10中10小于3: - )

答案 3 :(得分:0)

您需要将预算存储为数字数据类型,例如数据库中的unsigned INT or BIGINT

目前,ORDER会将所有数据视为TEXT。这就是他们按第一位数排序的原因。

答案 4 :(得分:0)

你可以尝试这个

SELECT * 
FROM sponsors 
ORDER BY cast(budget as int)

如果这是你的列值(6,00,00 p.a)

  SELECT * 
    FROM sponsors 
    ORDER BY cast(LEFT(budget,length(budget)-3) as int)