キー値に基づいて MySQL の JSON オブジェクトからテキスト値を効率的に取得する方法

Patricia Arquette
リリース: 2024-11-05 00:19:01
オリジナル
726 人が閲覧しました

How to Efficiently Retrieve a Text Value from a JSON Object in MySQL Based on a 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"}, ...]');</code>
ログイン後にコピー

目的:

フィールドの ID を指定して、その値に基づいて特定のオプションの対応するテキスト値を取得します。

前解決策:

最初の試みでは、JSON 関数を組み合わせて使用​​しました。ただし、これらのアプローチは面倒で、複雑な式が必要でした。

JSON_TABLE() 関数 (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;

+-------+-------+
| text  | value |
+-------+-------+
| Grass | 1     |
+-------+-------+</code>
ログイン後にコピー

非 JSON 代替:

より簡単な解決策は、JSON データを正規化されたテーブルに変換することです:

<code class="sql">CREATE TABLE `field_options` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `field_id` int(10) unsigned NOT NULL,
  `text` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  `value` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`field_id`) REFERENCES `fields`(`id`)
);</code>
ログイン後にコピー
<code class="sql">INSERT INTO `field_options` (field_id, text, value) VALUES
(
  1, 'Grass', '1'),
  (1, 'Synthetic (New Type - Soft)', '2'),
  ...
);</code>
ログイン後にコピー

このアプローチにより、従来の SQL 手法を使用した効率的な検索が可能になります。

<code class="sql">SELECT *
FROM `field_options`
WHERE value = '1';</code>
ログイン後にコピー

以上がキー値に基づいて MySQL の JSON オブジェクトからテキスト値を効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!