【问题标题】:PHP ORDER BY doesn't do what it's supposed to [closed]PHP ORDER BY 没有做它应该做的事情[关闭]
【发布时间】:2016-11-18 13:14:07
【问题描述】:

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

现在,我正在使用以下代码:

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

输出是:

9

27

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

【问题讨论】:

  • 那么你的问题是什么?它们是如何在您的数据库中列出的?
  • 没有 PHP 代码和数据库结构,我们什么都想不通。
  • 输出的是哪一列?
  • @Soheyl 问题是数字没有以正确的方式排序......它存储为varchar
  • @AhmadWabbi biedingen 是表格,而不是选定的列。

标签: mysql


【解决方案1】:

您的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

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多