MySQL で JSON 形式のフィールドをクエリする詳細な説明

MySQL で JSON 形式のフィールドをクエリする詳細な説明

作業開発プロセス中に、顧客の名前、携帯電話番号、ID カード、およびドキュメントの種類を動的に保存する必要があるという要件が発生しました。これは、フロントエンドが 1 人、2 人、または 3 人の情報を送信する可能性があることを意味し、これは 4 つのフィールド (名前、携帯電話番号、ID カード、ドキュメントの種類) の動的かつ固定されていない数です。

フロントエンドページは次のとおりです。

これはフロントエンドの写真です

リストを使用していますフロントエンドからjsonを受信するために、mysqlはvarcharを使用してこのjson配列を保存します。

[{
	"カードID": "110101199003072316",
	"cstName": "張双児 1",
	"cstモバイル": "13263654144",
	"idカードタイプ": "1"
}, {
	"カードID": "11010119900307571X",
	"cstName": "張双児2",
	"cstモバイル": "13263654144",
	"idカードタイプ": "1"
}]

製品の要件は、これらの共同顧客情報をファジークエリすることです。 最初は、次のように間違って書きました。

signCustomerGroup から '%儿%' のような * を選択します

しかし、後になって問題が見つかりました。たとえば、文字 c をあいまいに入力すると、左側の英語のフィールド名「cardId」が一致してしまいます。
その後、MySQL 5.7 以降のバージョンでは json タイプが追加され、一部の json タイプ関数を使用して json 形式のフィールドを直接クエリできることを知りました。

正しい構文は次のとおりです。

テーブルフィールド:

id顧客情報の拡張子に署名する
1 [{“cstName”:“hhjk”,“cstMobile”:“14258669888”,“idCardType”:“1”,“cardId”:“460101199601012516”}]
2 [{"cstName":"ghhj中文1355","cstMobile":"18253558608","idCardType":"1","cardId":"460101199601012815"},{"cstName":"fhjj重要133366","cstMobile":"15555555555","idCardType":"1","cardId":"460101199601012313"}]

使用される主なSQL関数はjson_extract()で、これはJSON形式から指定されたすべてのデータを検索するために使用されます。

1. json配列クエリ

json 配列形式のフィールドをあいまいにクエリします。
方向:
SELECT * FROM テーブル名 WHERE json_extract(フィールド名,"$[*].json中key") like '%検索する値%';
例:
テーブルから * を選択し、 json_extract(sign_customer_info_ext,"$[*].cstName") を '%h%' のように指定します。
正確なクエリ (注: 正確なクエリでは、クエリ対象のフィールドが属する配列の添え字を指定する必要があります。たとえば、最初の添え字が [0] の場合、2 番目の添え字は [1] になります)
テーブルからid、sign_customer_info_extを選択します。WHERE json_extract(sign_customer_info_ext,"$[0].cstName") = 'ghhj中文1355';

2. 単一のJSONクエリ

フロントエンドと MySQL データベースの単一の JSON パラメータ:

{
	"cstName": "馬雲",
	"cstモバイル": "17879767646",
	"idCardType": "1",
	"カードID": "E4813980"
}
ファジークエリ単一JSONクエリ:
行き方:
SELECT id,sign_customer_info_ext FROM table name WHERE json_extract(field name,"$.json中key") like '%马云%';
例:
SELECT id,sign_customer_info_ext FROM table WHERE json_extract(sign_customer_info_ext,"$.cstName") like '%Ma Yun%';

要約する

これで、MySQL で json 形式をクエリする方法に関するこの記事は終了です。MySQL クエリ json 形式フィールドの関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JSON 型フィールドデータの抽出とクエリの MySQL 実装
  • MySQLはクエリ条件としてJSONフィールドの内容に基づいてデータを取得します(JSON配列を含む)
  • Mybatis mysql ファジークエリメソッド(複数のフィールドを CONCAT)とバグ
  • MySQLクエリフィールドで文字列分割関数を実装するためのサンプルコード
  • MySQLクエリ時にフィールドにデフォルト値を割り当てる方法
  • MySQL の日付と時刻フィールドのクエリ

<<:  Dockerを使用してコンテナリソースを制限する方法

>>:  カルーセル効果を実現するための純粋なjs

推薦する

MySQL の結合クエリとサブクエリの問題

目次複数テーブル結合の基本構文クロス結合と直積現象クロスコネクトデカルト積現象内部結合外部結合左外部...

テキストエリアのテキスト入力領域に改行を実装する方法

textarea 入力領域でテキストを折り返す場合は、<br/> と入力すると <...

MacでのMySQL5.7.22のインストール手順

1. インストールパッケージを使用してMySQLをインストールします(オンラインダウンロードは遅すぎ...

Linuxの簡単な分析でファイアウォールの状態と外部に開いているポートの状態を確認する

1. ファイアウォールの状態を確認するファイアウォールのステータスを確認する systemctl s...

Jenkins+tomcat の自動ホットデプロイメント/再起動と発生した問題の解決策 (推奨)

1. 背景同社のプロジェクトは、これまでは手動で Maven でパッケージ化し、サーバーにアップロ...

win2008 サーバー セキュリティ設定の展開ドキュメント (推奨)

私は新年を迎える前からプロジェクトに取り組んでいましたが、ここ数日で、新しいサーバー用に新しく増設し...

Node.js でのクラスター作成に関する簡単な説明

目次クラスタクラスターの詳細クラスター内のイベントクラスター内のメソッドクラスター内の属性クラスター...

MySQL 文字列分割の例 (区切り文字なしの文字列抽出)

区切り文字なしの文字列抽出質問の要件データベース内のフィールド値:実装効果: 1行のデータを複数行に...

mysql5.7 でユーザーの初期パスワードを変更する方法

ユーザーが初めて MySQL データベースをインストールするとき、初期のルート パスワードを変更する...

Dockerの急速な拡張の高度な方法

1. コマンド方式作成された Swarm クラスターで nginx サービスを実行し、--repli...

Linux 名前空間ユーザーの詳細な説明

ユーザー名前空間は Linux 3.8 で追加された新しい名前空間で、ユーザー ID やグループ I...

SSHのssh-keygenコマンドの基本的な使い方の詳細な説明

SSH 公開鍵認証は、SSH 認証方式の 1 つです。 SSH パスワードフリーのログインは公開鍵認...

docker view container log コマンドの実装

なぜログを読む必要があるのでしょうか?たとえば、コンテナの起動に失敗したがプロンプトが表示されない場...

6ull が Linux ドライバ モジュールをロードできない問題の解決方法

目次0x01 ドライバーモジュールのロードに失敗しました0x02 ソリューション要約する0x01 ド...