ホームページ  >  記事  >  バックエンド開発  >  PHPでファジークエリを実行する方法

PHPでファジークエリを実行する方法

醉折花枝作酒筹
醉折花枝作酒筹オリジナル
2021-04-07 10:38:534870ブラウズ

ファジー クエリ方法: 1. SQL 一致パターンを使用し、演算子は「LIKE」または「NOT LIKE」を使用します。一致する場合、大文字と小文字は区別されません。2. 正規表現一致パターンを使用し、演算子が「REGEXP」または「NOT REGEXP」を使用する場合、正規表現は一致するフィールドのどこにでも出現できます。

PHPでファジークエリを実行する方法

このチュートリアルの動作環境: 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

#__

SELECT * FROM user WHERE username LIKE '___';

#⑤#2 つのワイルドカード文字を組み合わせて使用​​します


#2 番目の文字が o

であるユーザーをクエリします # _o%

SELECT * FROM user WHERE username LIKE '_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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。