首页  >  文章  >  数据库  >  如何通过键值从 MySQL 表中的 JSON 字段中检索特定对象?

如何通过键值从 MySQL 表中的 JSON 字段中检索特定对象?

Susan Sarandon
Susan Sarandon原创
2024-11-01 03:11:02300浏览

How to Retrieve a Specific Object from a JSON Field in a MySQL Table by Key Value?

通过键值查找 MySQL JSON 中的对象

场景:

您正在使用MySQL 表并希望在搜索特定键值时从其中检索特定对象。

JSON 文档结构:

考虑以下架构:

<code class="sql">CREATE TABLE `fields` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `label` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  `options` json DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;</code>

示例数据:

<code class="sql">INSERT INTO `fields` (label, options) VALUES
(
  'My Field', 
  '[{"text": "Grass", "value": "1"}, {"text": "Synthetic (New Type - Soft)", "value": "2"}, {"text": "Synthetic  (Old Type - Hard)", "value": "3"}, {"text": "Gravel", "value": "5"}, {"text": "Clay", "value": "6"}, {"text": "Sand", "value": "7"}, {"text": "Grass/Synthetic Mix", "value": "8"}]'
);</code>

挑战:

您需要根据以下选项从选项字段中选择“草”文本值:搜索值“1”。

MySQL 8.0 解决方案:

MySQL 8.0 引入了 JSON_TABLE() 函数,提供了更高效的解决方案:

<code class="sql">select field_options.* from fields cross join 
json_table(fields.options, 
'$[*]' columns(
  text text path '$.text',
  value text path '$.value'
 )
) as field_options 
where field_options.value = 1;</code>

此查询使用交叉联接和 JSON_TABLE() 来检索选项字段中每个对象的文本和值列。

与 JSON_TABLE 相关的问题:

但是,使用 JSON_TABLE() 可能很复杂,并且每次需要这样的查询时都必须重复。

建议:

而不是使用 JSON,它可以更简单地将数据存储在具有文本和值对专用列的表中。这将允许使用常规 SQL 语法进行直接搜索:

<code class="sql">SELECT * FROM field_options WHERE value = '1';</code>

以上是如何通过键值从 MySQL 表中的 JSON 字段中检索特定对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn