我有一张桌子,如下所示:
表数据
id params
1 {"company1X":{"price":"1124.55"},"company2X":{"price":"1,124.55"},"company3X":{"price":""},"company4X":{"price":""},"company5X":{"price":"1528.0"}}
Run Code Online (Sandbox Code Playgroud)
我不知道在我的请求中使用"公司"的名称.
如何获取按价格订购的数据?谢谢!
PS我试过从数据中选择json_extract(params,'$ [*] .price')但它不起作用(返回空值).
$[*]获取JSON数组的所有元素,而不是对象.这是一个对象,所以你得到NULL.
$.*将获得JSON对象中的所有元素,因此$.*.price获取所有价格的JSON数组.
mysql> select json_extract(params, '$.*.price') from foo;
+-------------------------------------------+
| json_extract(params, '$.*.price') |
+-------------------------------------------+
| ["1124.55", "1,124.55", "", "", "1528.0"] |
+-------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
现在有一个问题.就SQL而言,这是一行.它无法按正常排序order by,适用于行.
MySQL没有排序JSON的功能......所以你被困住了.您可以返回JSON数组,并让接收数据的任何内容进行排序.您可能可以编写存储过程来对数组进行排序......但是,支持糟糕的表设计需要做很多工作.而是,更改表格.
真正的问题是这是对JSON列的错误使用.
JSON列击败了SQL数据库的大部分内容(在PostgreSQL中更少,JSON支持更好).SQL数据库使用行和列,但JSON将多行和列推入单个单元格.
因此,应谨慎使用JSON列; 通常当您不确定需要存储哪种数据时.将要搜索和排序的"价格"等重要信息应作为普通列进行.
您需要将表更改为普通的SQL表,其中包含公司名称和价格的列.然后,您可以使用正常的SQL功能order by,性能将从索引中受益.您的问题中没有足够的信息来表明该表可能是什么样子.
| 归档时间: |
|
| 查看次数: |
3834 次 |
| 最近记录: |