【问题标题】:MySql 5.7 json_extract by keyMySql 5.7 json_extract 按键
【发布时间】:2017-06-01 18:13:14
【问题描述】:

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

表格数据

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

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

如何获取按价格排序的数据? 谢谢!

P.S 我试过 select json_extract(params, '$[*].price') from data 但它不起作用(返回空值)。

【问题讨论】:

  • 你只有成对的“公司”、“价格”吗?使用两列,而不是 JSON。

标签: mysql json


【解决方案1】:

$[*] 获取 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 数据库的大部分要点(在具有更好 JSON 支持的 PostgreSQL 中则更少)。 SQL 数据库使用行和列,但 JSON 将多行和多列推到单个单元格中。

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

您需要将表更改为包含公司名称和价格列的普通 SQL 表。然后,您可以使用像order by 这样的普通 SQL 功能,并且性能将从索引中受益。您的问题中没有足够的信息来建议该表格的外观。

【讨论】:

  • 如何使用键 {"company1x":"1124.55","company2x":"1,124.55","company3x":"", "company4x":"", "company1x":" 获取数据1528.0"} @Schwern
  • @PraveenR MySQL JSON docs 应该解释一下。如果您仍然不确定,请提出问题,您会得到答案。
  • 2020年提取的json排序呢?
猜你喜欢
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多