web-dev-qa-db-ja.com

MySQL-テーブルのすべての列でLIKEを使用することは可能ですか?

データベースを特定の単語で検索する単純な検索バーを作成しようとしています。 WHEREを使用せずにLIKE属性を使用することは可能ですか? 1つの列だけでなく、すべての列でキーワードを検索したい。現在私はこれを持っています:

mysql_query("SELECT * FROM shoutbox WHERE name LIKE '%$search%' ")

これは明らかに、検索入力で名前のみを検索します。私はこれらの両方を試しました:

mysql_query("SELECT * FROM shoutbox LIKE '%$search%' ")
mysql_query("SELECT * FROM shoutbox WHERE * LIKE '%$search%' ")

どちらも機能しませんでした。これは可能ですか、それとも別の方法がありますか?

17
user2566387

MATCH()関数も確認したい場合があります。例:

SELECT * FROM shoutbox 
WHERE MATCH(`name`, `foo`, `bar`) AGAINST ('$search')

これにブールモードを追加することもできます。

SELECT * FROM shoutbox 
WHERE MATCH(`name`, `foo`, `bar`) AGAINST ('$search') IN BOOLEAN MODE

また、関連性スコアを取得し、FULLTEXTキーを追加してクエリを高速化することもできます。

6
Dave

近道はありません。各列を個別に指定する必要があります。

SELECT * FROM shoutbox 
    WHERE name LIKE '%$search%' 
        OR foo LIKE '%$search%' 
        OR bar LIKE '%$search%'  
        OR baz LIKE '%$search%' 
15
JJJ

ISショートカット!;)

SELECT * FROM shoutbox 
WHERE CONCAT(name, foo, bar, baz) LIKE '%$search%' 
6
esdiweb

これは重複した行を表示しなくなります。

SELECT * FROM shoutbox 
WHERE (name LIKE '%$search%' 
    OR foo LIKE '%$search%' 
    OR bar LIKE '%$search%'  
    OR baz LIKE '%$search%') 
3
Harsha