繁体   English   中英

MySql 5.7按键json_extract

[英]MySql 5.7 json_extract by key

我有一张桌子,如下所示:

表数据

id params
1  {"company1X":{"price":"1124.55"},"company2X":{"price":"1,124.55"},"company3X":{"price":""},"company4X":{"price":""},"company5X":{"price":"1528.0"}}

我不知道在我的请求中使用“公司”的名称。

如何获取按价格订购的数据? 谢谢!

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"] |
+-------------------------------------------+

现在有一个问题。 就SQL而言,这是一行。 它不能按正常order by排序,对行有效。

MySQL没有排序JSON的功能......所以你被困住了。 您可以返回JSON数组,并让接收数据的任何内容进行排序。 您可能可以编写存储过程来对数组进行排序......但是,支持糟糕的表设计需要做很多工作。 而是,更改表格。


真正的问题是这是对JSON列的错误使用。

JSON列击败了SQL数据库的大部分内容(在PostgreSQL中更少,JSON支持更好)。 SQL数据库使用行和列,但JSON将多行和列推入单个单元格。

因此,应谨慎使用JSON列; 通常当您不确定需要存储哪种数据时。 将要搜索和排序的“价格”等重要信息应作为普通列进行。

您需要将表更改为普通的SQL表,其中包含公司名称和价格的列。 然后,您可以使用正常的SQL功能,如order by ,性能将从索引中受益。 您的问题中没有足够的信息来表明该表可能是什么样子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM