【问题标题】:Laravel Order By returns weird orderLaravel Order By 返回奇怪的顺序
【发布时间】:2020-09-15 19:19:52
【问题描述】:

大家好,我有一些信息,我想按账单号订购 这是数据数组

[
    {
        "id": 162,
        "bill_number": "9",
        "created_at": "2020-09-15T16:21:47.000000Z",
        "updated_at": "2020-09-15T16:28:40.000000Z"
    },
    {
        "id": 161,
        "bill_number": "8",
        "created_at": "2020-09-15T16:06:56.000000Z",
        "updated_at": "2020-09-15T16:07:09.000000Z"
    },
    {
        "id": 164,
        "bill_number": "10",
        "created_at": "2020-09-15T16:28:51.000000Z",
        "updated_at": "2020-09-15T16:29:24.000000Z"
    },
    {
        "id": 151,
        "bill_number": "1",
        "created_at": "2020-09-15T15:18:47.000000Z",
        "updated_at": "2020-09-15T15:19:13.000000Z"
    }
]

基本上是一拳

我正在像这样检索它们

    $paid_bills = Bill::where([
        ['grand_total' , '!=' , 'null'],
        ['status' , 'payed']
    ])->orderBy('bill_number' , 'desc')
    ->get();

我得到的是这样的

9

8

10

1

简单的问题是为什么要这样订购它以及如何解决它。 感谢您的宝贵时间

注意:我删除了不相关的数据以节省时间

【问题讨论】:

  • 这是字符串排序...将值存储为整数,然后您将获得正确的排序。

标签: laravel sql-order-by


【解决方案1】:

你可以使用orderByRaw

您可以将字符串列转换为整数,将其乘以 1 ...

 $paid_bills = Bill::where([
        ['grand_total' , '!=' , 'null'],
        ['status' , 'payed']
    ])->orderByRaw('bill_number*1 desc')
    ->get();

【讨论】:

  • 感觉有点老套……为什么不找个合适的演员表呢?喜欢orderByRaw('CAST(bill_number as UNSIGNED) DESC')
  • 非常感谢你工作得非常完美,我会提出你的问题,但我会将答案标记给 hxk1r,因为他给了我们领导
  • 请勾选这个答案,@TimLewis 说我的答案完全不正确。
【解决方案2】:

您的bill_number 当前是字符串。要在 DESC 中对它们进行排序,您应该将它们用作整数。

在您的账单上使用 "bill_number": 9, 而不是 "bill_number": "9",,并将其应用于所有账单。

去掉引号。

【讨论】:

  • 我正在从我的数据库中获取数据,并且 bill_number 具有 String 类型,因为我需要使用大数字,所以如何在 where 语句中转换它们?
  • 我不是 Laravel 的专家,但我有点确定 DESC 的排序仅适用于整数。而你的 bill_number 是字符串。我对此很有信心
  • @hxk1r 这部分不正确; ORDER BY column DESC 适用于各种列类型;字符串、整数、日期、时间等。bill_number 是一个字符串是正确的,但这不是静态数据;您不能只说“删除引号”,因为那样不行。
  • 嗯,我想你明白了,我会把它写成 bigInt 或类似的东西,非常感谢@TimLewis
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 2014-10-12
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
相关资源
最近更新 更多