首頁  >  文章  >  資料庫  >  如何透過鍵值從 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 語法進行直接搜尋:

以上是如何透過鍵值從 MySQL 表中的 JSON 欄位中檢索特定物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn