ホームページ  >  記事  >  データベース  >  MySQLでjson_extract関数を使用する方法

MySQLでjson_extract関数を使用する方法

WBOY
WBOY転載
2023-06-02 20:16:091907ブラウズ

    1. json_extract の使用シナリオの説明

    日常のビジネス開発では、通常、クエリを実行するときに mysql データベースのフィールドに json 形式の文字列を保存する必要があります。 json データは大きく、すべてを取得して毎回解析してクエリするのは非効率的で面倒です。 key(json配列型であれば添字で対応する位置の値を取得できる)なのでとても便利です。

    2. MySQL json_extract 関数の紹介

    2.1 関数の紹介

    Mysql5.7 バージョン以降の新機能、Mysql はネイティブ Json 型を提供しますが、Json 値はそうではありません。文字列として保存されますが、文書要素を高速に読み取ることができる内部バイナリ形式で保存されます。 Json 列の挿入または更新時に Json テキストが自動的に検証され、検証に失敗したテキストはエラー メッセージを生成します。 Json テキストは標準的な方法で作成され、=、d2714fbb0e49a95306c2048bc19e4f2b、>=、a8093152e673feb7aba1828c43532094、!=、<= など、ほとんどの比較演算子を比較演算に使用できます。 >。

    2.2 使用方法

    保存されるデータは json 文字列 (型は vachar) です。

    JSON 内の特定のフィールドの値をクエリする場合、使用されるメソッドは JSON_EXTRACT() です。

    構文:

    **JSON_EXTRACT(json_doc, path[, path] …)**

    使用上のヒント:

      json 文字列が配列でない場合は、直接使用します
    • $.フィールド名

    • json 文字列が配列の場合 [Array ] を使用して、
    • $[対応するインデックス ID]

    • 2.3 Notes

    JSON_EXTRACT パフォーマンス検証を直接使用し、実行を表示してすべてが完了していることを確認します。テーブルスキャンを計画します。

    利用シーン:データ量が少ない場合はjson文字列が大きければ利用可能ですが、データ量が多い場合は非推奨です。


    3. データ検証

    3.1 通常の json から値を抽出する

    手順:

      通常のフィールドを使用する
    • $ .KEY

      $.KEY[index] を使用して

    • 配列フィールドを取得します。インデックスは 0 から始まることに注意してください。

    • 実際の使用では、以下のjson文字列を対応するテーブルのフィールドに置き換えるだけですが、空判定やjsonの置き換えなどのETL変換操作が必要となることに注意してください。 ##
      select 
      	json_extract(&#39;{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}&#39;,"$.name") as name,
      	json_extract(&#39;{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}&#39;,"$.tel_no") as tel_no,
      	json_extract(&#39;{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}&#39;,"$.hobbies[0]") as hobby_1,
      	json_extract(&#39;{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}&#39;,"$.hobbies[1]") as hobby_2,
      	json_extract(&#39;{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}&#39;,"$.hobbies[2]") as hobby_3,
      	json_extract(&#39;{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}&#39;,"$.hobbies[3]") as hobby_4;
    • 結果:

    ##name

    電話番号hobby_1##「張三」136-6666-6666「バスケットボール」" run""sing"3.2 json 配列の値を抽出site_user テーブル
    hobby_2 趣味_3 趣味_4
    #NULL
    id

    name

    #tags ##1zhangsan23 4ユーザーの最初のタグを抽出します: 結果: ##idname
    #[“共通”]
    lisi [” VIP”]
    wangwu [“VVIP”,“プラチナ”]
    zhaoliu
    select 
    	id,
    	name,
    	tags, 
    	json_extract(if(LENGTH(tags)>0,tags, &#39;[]&#39;),"$[0]")  # 如果tags无数据,赋值为空数组
    from site_user;

    タグ

    ##12リシwangwuzhaoliu
    zhangsan "共通"
    "VIP" 3
    「VVIP」 4
    NULL

    以上がMySQLでjson_extract関数を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。