【问题标题】:How to use mysql cast json?如何使用 mysql 转换 json?
【发布时间】:2020-05-03 20:39:54
【问题描述】:

我想将 Json 中的价格从小到大排序,但我认为我做错了什么,我究竟会在哪里出错?

    public function kitaplik($id)
    {
        $this->db->where('kitaplik_isbn', $id);
        $this->db->order_by("CAST(json_object('kitaplik_ifiyat', kitaplik_json) AS DECIMAL(9,2))");
        $query = $this->db->get('kitaplik');
        return $query->result();
    }

kitaplik->kitaplik_json

{"kitap_fiyat":25.46,"kitap_ifiyat":12}

我在“kitaplik”表中有很多产品,这些产品的价格都是 json 格式。我想使用 CAST Decimal 从小到大对这些产品进行排序。但我必须通过在 json 中的“kitaplik_ifiyat”部分中获取价格来进行排序。我该怎么做?

【问题讨论】:

  • 但是错误是什么?什么是预期的输出,你的 json 列是什么样的?除了您期望返回多少条记录之外?您正在查询 $id,这是一个唯一索引吗?如果是这样......好吧
  • @Vickel 不会对数据进行从小到大的排序。它输出正常数据。
  • 是的!但是whereclause 是什么,是否将返回的记录集限制为一个?这就是我问的原因,json 列是什么样的,预期的输出是什么
  • @Vickel 我的英语不是很好,所以我不太懂你。数据输出如下。它没有正确排序。 24.48 TL --------- 24.19 TL --------- 12.00 TL
  • 您的英语没问题,请用相关详细信息编辑您的问题。如果您现在查看您的问题和最后一条评论,您自己能找到答案吗?为什么您评论中的排序顺序不正确?您需要将此添加到您的问题中,请

标签: php mysql codeigniter


【解决方案1】:

这就是我解决问题的方法


    public function kitaplik($id)
    {
        $this->db->select("kitaplik_json, kitaplik_isbn, JSON_EXTRACT(kitaplik_json, '$.kitaplik_ifiyat') AS fiyat");
        $this->db->where('kitaplik_isbn', $id);
        $this->db->order_by('fiyat ASC');
        $query = $this->db->get('kitaplik');
        return $query->result();
    }


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 2015-04-06
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多