web-dev-qa-db-ja.com

MySQLで複数の列を検索する方法は?

キーワードベースの一致を見つけるために複数の列を検索する検索機能を作成しようとしています。このクエリ:

SELECT title FROM pages LIKE %$query%;

1つの列を検索する場合にのみ機能し、列名をカンマで区切るとエラーが発生することに気付きました。 mysqlで複数の列を検索することは可能ですか?

29
George

検索に返すものに応じて、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 を試してください。

36
akamike

検索専用の場合は、CONCATENATE_WSを使用できる場合があります。これにより、ワイルドカード検索が可能になります。テーブルのサイズによっては、パフォーマンスの問題がある場合があります。

SELECT * 
FROM pages 
WHERE CONCAT_WS('', column1, column2, column3) LIKE '%keyword%'
43
Terra Walker

テーブルが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)

、ただしインデックスがなくても機能します。

16
Quassnoi

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」のようなデータがある場合に役立ちます。

例えば

  • パートパテル
  • パートP
  • パテルパート

2番目は、「firstname-lastname」のようなデータがある場合に役立ちます。また、特殊文字を使用することもできます。

例えば

  • パートパテル
  • parth_p
  • patel#parth
3
Parth Patel
SELECT * FROM persons WHERE (`LastName` LIKE 'r%') OR (`FirstName` LIKE 'a%');

上記のクエリで試してください。

0
user3781751

これは、検索結果としてデータベースから何かを検索するために使用できるクエリです。

SELECT * FROM tbl_customer 
    WHERE CustomerName LIKE '%".$search."%'
    OR Address LIKE '%".$search."%' 
    OR City LIKE '%".$search."%' 
    OR PostalCode LIKE '%".$search."%' 
    OR Country LIKE '%".$search."%'

このコードを使用すると、複数の列を簡単に検索できます

0
Ravi Khatri