PHP ORDER BY并没有做它应该做的事情

时间:2016-11-18 13:14:07

标签: mysql

我正在创建某种程序,它首先存储数值,稍后,该列中会有字符和单词,所以我将我的数字存储在VARCHAR中。

现在,我正在使用此代码:

GDP.loc[GDP['Country Name'] == "Korea, Rep.", 'Country Name'] = "South Korea"

输出是:

SELECT * FROM biedingen WHERE bod_refferentie=$item ORDER BY bod_bedrag DESC LIMIT 5

有没有办法让我将数值存储在varchar中,但是仍然可以使用与上面相同的方法对它们进行排序?

1 个答案:

答案 0 :(得分:6)

您的bod_bedrag列似乎是varchar或其他非数字类型。因此,MySQL将列排序为文本而不是数字。这解释了为什么单个数字出现在两位数之前等等。

此处的一种解决方法是在订购时将bod_bedrag列转换为数字类型:

SELECT *
FROM biedingen
WHERE bod_refferentie=$item
ORDER BY CAST(bod_bedrag AS SIGNED) DESC
LIMIT 5

一个漂亮的替代方案认为排序varchar数字实际上适用于相同长度的数字。我的意思是,如果您有100, 305, 900并按升序排序,您将获得此订单。这是避免演员阵容的另一个选择:

SELECT *
FROM biedingen
WHERE bod_refferentie=$item
ORDER BY CHAR_LENGTH(bod_bedrag) DESC,
         bod_bedrag DESC
LIMIT 5