拡張検索のための WHERE 句の CONCAT() の利用
データベース クエリの一般的なタスクは、複数の列にわたるデータの検索です。たとえば、名と姓の別々の列があるテーブルでは、両方の列に対して検索語を照合することができます。
ただし、ユーザーの検索クエリに、名と姓を組み合わせたものが含まれている場合は、次のように区切られます。スペースを使用すると、従来の LIKE 比較では、姓または名が一致するすべての個人が返されます。検索を絞り込むには、MySQL CONCAT() 関数を使用できます。
独自のアプローチと制限事項:
当初、クエリでは first_name と first_name に対して個別の LIKE 比較が使用されていました。 last_name 列、いずれかの列での一致を許可します:
select * from table where first_name like '%$search_term%' or last_name like '%$search_term%';
ただし、これはこのアプローチには、検索語が "Larry Smith" であっても結果セットに "Larry" が含まれるなど、単一単語の一致に基づいてレコードを取得するという問題があります。
CONCAT( を使用した洗練されたクエリ) ) 関数:
この制限に対処するために、複数の式を 1 つの文字列に連結する CONCAT() 関数を利用するようにクエリが変更されました:
select * from table where concat_ws(' ',first_name,last_name) like '%$search_term%';
このクエリは、名と姓の値をスペースで区切って連結し、結果の文字列を検索語と比較します。 。両方の列を 1 つの式に結合することで、完全な名前との一致が保証されます。
実行に関する考慮事項:
クエリは意図したとおりに動作するはずですが、注意する価値があります。 CONCAT() 関数をクエリの途中で実行するよりも、クエリの最後で実行するとパフォーマンスが向上する可能性があります。
結論として、WHERE 句で MySQL CONCAT() 関数を使用すると、より優れたパフォーマンスが得られます。複数の列にわたる検索に対する正確なアプローチにより、ユーザーの意図に合ったカスタマイズされた結果が提供されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3