19

データベースから特定の単語を検索する単純な検索バーを作成しようとしています。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%' ")

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

4

4 に答える 4

17

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

SELECT * FROM shoutbox 
    WHERE name LIKE '%$search%' 
        OR foo LIKE '%$search%' 
        OR bar LIKE '%$search%'  
        OR baz LIKE '%$search%' 
于 2013-08-24T06:50:17.703 に答える
8

1 つのオプションはCONCAT、列を 1 つの文字列に結合するために使用することです。

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

ただし、この方法では、列が間隔なしで接着されるため、誤検出が発生することがあります。この問題を軽減するには、検索語に含まれないことがわかっているスペース ( ' ')、区切り文字 ( '-')、またはヌル バイト文字 ( ) を追加します。"\0"

たとえば、検索語にスペースが含まれていない場合は、列をスペースで区切ることができます。

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

一方、検索語にスペースが含まれている場合は、null バイトの方が適切に機能します。

SELECT * FROM shoutbox 
WHERE CONCAT(name, "\0", foo, "\0", bar, "\0", baz) LIKE '%$search term%'
于 2018-03-27T12:54:11.840 に答える
3

これにより、重複する行は表示されなくなります。

SELECT * FROM shoutbox 
WHERE (name LIKE '%$search%' 
    OR foo LIKE '%$search%' 
    OR bar LIKE '%$search%'  
    OR baz LIKE '%$search%') 
于 2015-10-28T15:50:22.117 に答える