ファジー クエリ方法: 1. SQL 一致パターンを使用し、演算子は「LIKE」または「NOT LIKE」を使用します。一致する場合、大文字と小文字は区別されません。2. 正規表現一致パターンを使用し、演算子が「REGEXP」または「NOT REGEXP」を使用する場合、正規表現は一致するフィールドのどこにでも出現できます。
このチュートリアルの動作環境: Windows7 システム、PHP7.1&&mysql8 バージョン、Dell G3 コンピューター。
Web サイトを構築するとき、Web サイト上の特定のリソースを検索するためにキーワードを使用する機能がよく使用されますが、このとき、ファジー クエリを使用する必要があることがよくあります。今日はPHPのファジークエリについて学習したので、まとめてみましょう。
上記はファジークエリのフローチャートです。
デモを容易にするために、単純なデータベース テーブルを作成する必要があります。
KEY ‘username’(‘username’)
はインデックスであり、非常に重要です。
インデックスの利点: 特定の条件に従ってデータを取得する場合、条件フィールドにインデックスが作成されていない場合、クエリ中にテーブル全体が走査されます。インデックスを作成すると、その後、クエリはインデックスに基づいて実行されるため、クエリのパフォーマンスが向上します。
返される結果は 1 つだけの SQL クエリです
アプリケーション シナリオ: ユーザー登録ログイン
戻り値は不確実です
アプリケーション シナリオ: サイト検索
注: 上記 2 つのクエリによって返される結果は空である場合があります。
ファジー クエリ テクノロジは 2 つのマッチング形式をサポートしています: 1.SQL マッチング モード (開発で最も一般的に使用されるモード); 2. 正規表現マッチング モード (非推奨)
SQL マッチング モード
1. SQL マッチング モードを使用する場合、演算子 = または != は使用できませんが、演算子 LIKE または NOT LIKE を使用してください;
2 . SQL マッチング モードを使用して、MYSQL は 2 種類のワイルドカード文字を提供します。 % は、任意の数の任意の文字 (0 を含む) を表します。 _ は、任意の 1 文字を表します。
3. 一致形式に上記の 2 つのワイルドカード文字が含まれていない場合は、SQL 一致モードを使用します。クエリの効果は = または !=;
4 と同等です。デフォルトでは大文字と小文字が区別されない SQL マッチング モードを使用します。
5 つのクエリ シナリオ
① #ユーザー名が特定の文字で始まるユーザーをクエリ
# #ユーザー名が文字「l」で始まるユーザーをクエリl%
SELECT * FROM user WHERE username LIKE 'l%';
② #特定の文字を含むユーザー名をクエリします。 with
#ユーザー名が特定の文字 'e' で終わるユーザーをクエリします
#%e
SELECT * FROM user WHERE username LIKE '%e ';
#③#ユーザー名に特定の文字が含まれるユーザーをクエリ
##ユーザー名に文字「o」が含まれるユーザーをクエリ
% o%
SELECT * FROM user WHERE username LIKE '%o%'; (一般的に使用されます)
## ④#クエリのユーザー名の長さは 3 User #__
#2 番目の文字が o
であるユーザーをクエリします # _o%
#正規表現一致パターン (非推奨)
ワイルドカード. 任意の 1 文字と一致します
* 0 個またはその前にある複数の文字と一致します
# x* は、任意の数量と一致する x 文字を示します
[. .] 括弧に一致する任意の文字
[abc] 文字 A b または c に一致
## [A-Z] 任意の文字に一致 [0-9] 任意の数字に一致[0-9]* 任意の数の任意の数に一致します
[A-Z]* 任意の数の文字に一致します
^ 文字または文字列の開始を意味します
^a は文字 a で始まることを意味します
$ は特定の文字または文字列で終わることを意味します
s$ は文字 s
で終わることを意味します 正規表現マッチングを使用するパターン 使用される演算子
REGEXP
または NOT REGEXP
(RLIKE
または NOT RLIKE
)
If正規表現を使用して照合すると、パターンは SQL パターンとは異なります。
#説明: 次の例のように
#ユーザー名が文字 l
## で始まるユーザーをクエリします。 # SQL 一致パターン l% 正規表現 ^l SELECT * FROM user WHERE username REGEXP '^l';ユーザー名がちょうど 3 文字のユーザーをクエリします。
SQL マッチング パターン ___
正規表現... ?これはそうですか
SELECT * FROM user FROMユーザー名 WHERE ユーザー名 REGEXP '...';
なぜすべてのユーザーが照会されるのですか?正規表現はパターンと一致するため、正規表現が一致フィールドのどこかに出現する場合、パターンは一致します。つまり... は 3 文字以上を含むユーザー名に一致し、テーブル内のすべてのユーザー名が一致するため、すべてのユーザーが照会されます。
注: ワイルドカード文字 . のみを使用して一致させる場合、N 個のワイルドカード文字が存在します。この場合、一致モードは、N 文字以上であることを意味します。正確な文字数を表現したい場合、形式は次のようになります: ^...$
SELECT * FROM user WHERE username REGEXP '^...$';
推奨学習: php ビデオ チュートリアル
以上がPHPでファジークエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。