ポール・ディクソンの答えは私にとって見事に機能しました。これに追加して、REGEXPの使用に関心のある人のために私が観察したいくつかのことを以下に示します。
ワイルドカードを使用して複数のLIKEフィルターを実行するには:
SELECT * FROM fiberbox WHERE field LIKE '%1740 %'
OR field LIKE '%1938 %'
OR field LIKE '%1940 %';
REGEXP代替を使用:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 ';
REGEXP引用符内および|の間の値 (OR)演算子はワイルドカードとして扱われます。通常、REGEXPが%1740%として機能するには、(。*)1740(。*)などのワイルドカード式が必要です。
ワイルドカードの配置をさらに制御する必要がある場合は、以下のバリアントのいくつかを使用してください。
制御されたワイルドカード配置でLIKEを実行するには:
SELECT * FROM fiberbox WHERE field LIKE '1740 %'
OR field LIKE '%1938 '
OR field LIKE '%1940 % test';
使用する:
SELECT * FROM fiberbox WHERE field REGEXP '^1740 |1938 $|1940 (.*) test';
特定の一致を絞り込むためのより効率的な方法がありますが、そのためには正規表現をさらに確認する必要があります。注:すべての正規表現パターンがMySQLステートメントで機能するとは限りません。パターンをテストして、何が機能するかを確認する必要があります。
最後に、複数のLIKEフィルタとNOT LIKEフィルタを実行するには、次のようにします。
SELECT * FROM fiberbox WHERE field LIKE '%1740 %'
OR field LIKE '%1938 %'
OR field NOT LIKE '%1940 %'
OR field NOT LIKE 'test %'
OR field = '9999';
REGEXP代替を使用:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |^9999$'
OR field NOT REGEXP '1940 |^test ';
または混合代替:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 '
OR field NOT REGEXP '1940 |^test '
OR field NOT LIKE 'test %'
OR field = '9999';
NOTセットを別のWHEREフィルターで分離したことに注意してください。否定パターン、前向きパターンなどを使用して実験しました。ただし、これらの式では、望ましい結果が得られなかったようです。上記の最初の例では、^ 9999 $を使用して完全一致を示しています。これにより、同じ式でワイルドカードを使用して特定の一致を追加できます。ただし、リストされている2番目の例でわかるように、これらのタイプのステートメントを混在させることもできます。
パフォーマンスについては、既存のテーブルに対していくつかのマイナーテストを実行しましたが、バリエーション間で違いはありませんでした。ただし、データベースが大きくなる、フィールドが大きくなる、レコード数が増える、フィルタが複雑になると、パフォーマンスが問題になる可能性があると思います。
いつものように、理にかなうように上記のロジックを使用してください。
正規表現について詳しく知りたい場合は、www.regular-expressions.infoを参照サイトとしてお勧めします。
WHERE FIND_IN_SET(f.fiberbox, "1740,1938,1940")