2012-03-05 8 views
1

各列:MySQLの正規表現の検索私はこのような正規表現</strong><strong>と私の<strong>のMySQL</strong>データベースを検索してい

$searchは、今私は取得しています、予想通り、すべてのこのWORD1|WORD2|WORD3

$regexp = "REGEXP '[[:<:]][[:alpha:]]*($search)[[:alpha:]]*[[:>:]]'"; 

SELECT * FROM 
    zitate 
WHERE 
    UPPER(`field1`) $regexp OR UPPER(`field2`) $regexp OR UPPER(`field3`) 

のように見えますエントリ$検索フィールド1またはフィールド2またはフィールド3と一致

しかし、私は受信したいWORD1、WORD2、およびWORD3 が各列内で一致するエントリ、テーブル全体ではありません。

私はこれが原因で、私のクエリでORであるが、このような何かを書くよりも良いものがある知っている:

WHERE 
    UPPER(`field1`) $regexp AND UPPER(`field2`) $regexp 
OR 
    UPPER(`field2`) $regexp AND UPPER(`field3`) $regexp 
OR 
    UPPER(`field1`) $regexp AND UPPER(`field3`) $regexp 
OR 
    UPPER(`field1`) $regexp AND UPPER(`field2`) $regexp AND UPPER(`field3`) $regexp 

または私はこのANDORクエリを使用する必要がありますが?

ヒントと回答ありがとう!

+0

本当に私に助言を与えることができない人はいませんか? – Fabian

答えて

1

アイデア:MySQLの論理値でそれらをINGの実際01にマップするので、代わりにORでいる、あなたは、単にのようにそれらを追加することができます。また

WHERE 1 < UPPER(`field1`) $regexp 
     + UPPER(`field2`) $regexp 
     + UPPER(`field3`) $regexp 

、あなたは/ MySQLのフルテキストインデックスについて学ぶ必要があります機能を検索したり、Fulltext Search with InnoDBのような他の解決策を見つけることができます。

+0

お返事ありがとうございます! – Fabian

関連する問題