mysql の find_in_set 関数の基本的な使い方

mysql の find_in_set 関数の基本的な使い方

序文

これは私が最近見つけた新しい機能です。

プロジェクトでの私の使用シナリオは次のとおりです。

アプリケーション タイプ テーブルには、parentId フィールドと parentIds フィールドが含まれています。前者は親 ID で、後者は複数レベルの親 ID です。どちらもデータベース内では varchar 型です。parentIds は複数の親 ID で構成され、"" で区切られています。

チームリーダーからこの機能が使えると言われたので、実際に使ってみて勉強してみました。

文法

FIND_IN_SET(文字列、文字列リスト)

意味

  1. 文字列 str が複数の部分文字列で構成される文字列リスト strlist 内にある場合、戻り値の範囲は 1 から N になります。
  2. 文字列リストは、「,」文字で区切られた一連の自己リンクで構成される文字列です。
  3. 最初の引数が定数文字列で、2 番目の引数が typeSET 列の場合、FIND_IN_SET() 関数はビット演算を使用するように最適化されます。
  4. str が strlist にない場合、または strlist が空の文字列の場合、戻り値は 0 になります。
  5. いずれかのパラメータが NULL の場合、戻り値は NULL になります。最初の引数にカンマ (',') が含まれている場合、この関数は正しく機能しません。

strlist: 英語のカンマ「,」で連結された文字列。例:「a,b,c,d」。この文字列は、カンマで連結された SET 型の値に似ています。

例: SELECT FIND_IN_SET('b','a,b,c,d'); //戻り値は2で、これは2番目の値です


記事テーブルにはタイプフィールドがあり、1 見出し、2 おすすめ、3 ホットスポット、4 画像とテキストなどの記事タイプが格納されます。
見出しと話題の記事と写真とテキストが一体となった記事が、1,3,4の形式で保存されています。では、SQL を使用して、画像とテキストを含むタイプ 4 のすべての記事を検索するにはどうすればよいでしょうか?

ここで find_in_set が役に立ちます。引用内容は以下のとおりです。

FIND_IN_SET('4',type) で記事から * を選択

find_in_set() と in の違い:

2つの違いを示すテストテーブルを作成する

テーブル `tb_test` を作成します (
 `id` int(8) NOT NULL auto_increment,
 `name` varchar(255) NOT NULL,
 `list` varchar(255) NOT NULL,
 主キー (`id`)
);
`tb_test` に VALUES (1, 'name', 'daodao,xiaohu,xiaoqin') を挿入します。
`tb_test` に値 (2、'name2'、'xiaohu、daodao、xiaoqin') を挿入します。
`tb_test` に値 (3、'name3'、'xiaoqin、daodao、xiaohu') を挿入します。

当初、MySQL は次のようなクエリを実行できると考えていました。

tb_test から id、name、list を選択 WHERE 'daodao' IN(list); -- (I)

実際、これは機能しません。クエリは、リスト フィールドの値が 'daodao' と等しい (IN の前の文字列と完全に一致する) 場合にのみ有効です。それ以外の場合は、'daodao' が実際にリストにあっても結果は取得されません。

これを見てみましょう:

tb_test から id、name、list を選択 WHERE 'daodao' IN ('libk', 'zyfon', 'daodao'); -- (II)

それはいいです。

これら2つの違いは何ですか?なぜ最初の方法では正しい結果が得られないのに、2 番目の方法では正しい結果が得られるのでしょうか。その理由は、(1)の(list)リストは変数であるのに対し、(2)の('libk'、'zyfon'、'daodao')は定数だからです。

したがって、(1)を正しく動作させたい場合には、

find_in_set():

SELECT id,name,list from tb_test WHERE FIND_IN_SET('daodao',list); -- (I) の改良版

要約する

MySQL の find_in_set 関数の基本的な使い方についてはこれで終わりです。MySQL の find_in_set 関数の使い方についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • mysql での find_in_set() 関数と in() の使用に関する詳細な説明
  • MySQL FIND_IN_SET関数の使い方
  • MySQL の組み込み関数 find_in_set を使用した効率的なあいまい検索の詳細な説明
  • MySQL での find_in_set() 関数の使用に関する詳細な説明
  • MySQLは、where in()順序ソートを実装するためにfind_in_set()関数を使用します。

<<:  Centos7 でスーパーバイザ デーモンをインストールして設定する方法

>>:  Vue.jsはElement-uiを使用してナビゲーションメニューを実装します

推薦する

JS配列の組み込みトラバーサルメソッドとその違いについての簡単な説明

目次forEach() (ES6) メソッドmap() (ES6) メソッドflatMap() メソ...

MySQLの大規模テーブル最適化ソリューションについての簡単な説明

背景Alibaba Cloud RDS for MySQL(MySQL バージョン 5.7)データベ...

ウェブカラーのコントラストと調和のテクニックの共有

色のコントラストと調和対照的な状況では、色の相互作用は単一の色によって与えられる感覚とは異なります。...

Vueはキー表示のショートカットキー効果を取得する入力コンポーネントを実装します

ページ上でショートカットキーをカスタマイズする要件に遭遇し、ショートカットキーを設定して表示する場所...

MySQL データ分析ストレージエンジンの例の説明

目次1. 事例紹介2. システムのデフォルトのストレージエンジンとデフォルトの文字セットを表示する3...

CSS3 を使用して色付きのプログレスバーアニメーションを実装する例

簡単なチュートリアルこれは CSS3 カラー プログレス バー アニメーション効果です。 CSS3 ...

入力ボックスのカーソルサイズの表示が一貫していない問題の解決方法

入力ボックス内のカーソルのサイズが一定ではありませんIE7とChromeの違いは非常に明白ですまず、...

JavaScriptの詳細な分析と方向の変更方法

目次これ方法オブジェクト内これを隠した厳密モードこれを変更してこれいつものように、まずはコードを見て...

Vue3+Vantコンポーネントを使用してアプリの検索履歴機能を実装する(サンプルコード)

現在、新しいアプリプロジェクトを開発中です。私にとっても初めてのアプリ開発です。チームで調査と検討を...

js の toString メソッドの 3 つの機能

目次1. toStringメソッドの3つの機能2. オブジェクトを表す文字列を返す3. カスタム t...

HTML ではスペースはどのように表現されますか (どのような意味ですか)?

Web 開発では、次のような文字によく遭遇します: &nbsp;これは実際には HTML が...

素晴らしいCSS属性MASKの詳しい説明

この記事では、CSS の非常に興味深い属性マスクを紹介します。名前が示すように、マスクはマスクと翻訳...

大量のデータをMySQLにインポートする際に発生する問題と解決策の分析

プロジェクトでは、SQL を使用してデータ分析を実行するために、大量のデータをデータベースにインポー...

n 個のコンテナ要素による無限スクロールの実装コード

シナリオ最大 10000 要素のリストを正しくレンダリングする方法。無限ドロップダウン読み込みテクノ...

フロントエンド Vue ユニットテストを始める

目次1. ユニットテストはなぜ必要なのでしょうか? 2. ユニットテストの書き方3. テストツール4...