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

order by budget high to low or low to high

从高到低:

$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

我做错了什么?

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

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

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

换句话说,您需要告诉 SQL(通过您的模式)您有专门的数字数据。以 10 为基数,10 仅小于 3。:-)

您需要在数据库中将预算存储为数字数据类型,例如无符号 INT or BIGINT

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

你可以试试这个

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)

解决这个问题的 "correct" 方法是 re-architect table 并将预算分成两个字段,一个 int 和一个 varchar,它描述了 int 所指的内容,例如"p.a" 或 "ongoing" 或 "per month" 或其他。这样你就可以通过 int 字段正确地排序你的数据。

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

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

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