キーワードベースの一致を見つけるために複数の列を検索する検索機能を作成しようとしています。このクエリ:
SELECT title FROM pages LIKE %$query%;
1つの列を検索する場合にのみ機能し、列名をカンマで区切るとエラーが発生することに気付きました。 mysqlで複数の列を検索することは可能ですか?
検索に返すものに応じて、ANDまたはOR演算子を使用できます。
SELECT title FROM pages WHERE my_col LIKE %$param1% AND another_col LIKE %$param2%;
返されるレコードについては、両方の句が一致する必要があります。代わりに:
SELECT title FROM pages WHERE my_col LIKE %$param1% OR another_col LIKE %$param2%;
いずれかの句が一致すると、レコードが返されます。
MySQL SELECTクエリでできることの詳細については、 documentation を試してください。
検索専用の場合は、CONCATENATE_WSを使用できる場合があります。これにより、ワイルドカード検索が可能になります。テーブルのサイズによっては、パフォーマンスの問題がある場合があります。
SELECT *
FROM pages
WHERE CONCAT_WS('', column1, column2, column3) LIKE '%keyword%'
テーブルがMyISAM
の場合:
SELECT *
FROM pages
WHERE MATCH(title, content) AGAINST ('keyword' IN BOOLEAN MODE)
列にFULLTEXT
インデックスを作成すると、これははるかに高速になります。
CREATE FULLTEXT INDEX fx_pages_title_content ON pages (title, content)
、ただしインデックスがなくても機能します。
1)
select *
from employee em
where CONCAT(em.firstname, ' ', em.lastname) like '%parth pa%';
2)
select *
from employee em
where CONCAT_ws('-', em.firstname, em.lastname) like '%parth-pa%';
Firstは、「firstname lastname」のようなデータがある場合に役立ちます。
例えば
2番目は、「firstname-lastname」のようなデータがある場合に役立ちます。また、特殊文字を使用することもできます。
例えば
SELECT * FROM persons WHERE (`LastName` LIKE 'r%') OR (`FirstName` LIKE 'a%');
上記のクエリで試してください。
これは、検索結果としてデータベースから何かを検索するために使用できるクエリです。
SELECT * FROM tbl_customer
WHERE CustomerName LIKE '%".$search."%'
OR Address LIKE '%".$search."%'
OR City LIKE '%".$search."%'
OR PostalCode LIKE '%".$search."%'
OR Country LIKE '%".$search."%'
このコードを使用すると、複数の列を簡単に検索できます