'%#astributes.q#%'のようなmysql名 - 正確な一致の結果を返しませんか?

StackOverflow https://stackoverflow.com/questions/2441347

質問

次のmysqlクエリがあります。

SELECT  *
FROM    customer
WHERE   
fName LIKE '%#attributes.q#%' AND deleted = 'N'
OR 
lName LIKE '%#attributes.q#%' AND deleted = 'N'

これは推測に合わせて正常に機能しますが、正確な一致を提供する場合:「ビルクリントン」fName = bill lname =クリントン上のクエリまでは0の結果が得られますか? Bill Clintが結果をもたらす場所。

このクエリをどのように更新して、結果と同じように結果と等しいと言うことができますか?

役に立ちましたか?

解決

あなたの質問から言うのは難しいですが、私はあなたの顧客テーブルが次のようになると推測しています:

id    fName    lName      deleted
---------------------------------
1     John     Doe        N
2     Bill     Clinton    N
3     Fred     Smith      N
4     George   Bush       Y

あなたの質問でそれを述べたように、あなたの質問は次のように見えるので、あなたの質問でそれを述べたように、決してうまくいきません。

SELECT *
FROM customer
WHERE fname LIKE '%Bill Clinton%' AND deleted = 'N'
OR
  lName LIKE '%Bill Clinton%' AND deleted = 'N'

FNAMEまたはLNAMEフィールドに「Bill Clinton」が含まれているテーブルには、レコードがありません。

#aTtributes.q#テキストをマッサージする必要があるので、次のようなものを生成します。

SELECT *
FROM customer
WHERE ((fName LIKE '%Bill%') OR (fName LIKE '%Clinton%')) AND deleted = 'N'
OR
   ((lName LIKE '%Bill%') etc.....

比較のように、ファイル名でワイルドカードを使用するのと非常によく似ています。彼らはあなたのためにテキストのブロックを分割することはありませんが、別のテキストの塊の中にテキストの塊が存在するかどうかを教えてくれます。

私はあなたが必要とするのは フルテキスト検索, 、クエリ文字列の個々の単語を考慮し、結果を返します。もちろん、FullTextはMyISAMテーブルタイプでのみ利用可能であるため、InnoDBまたは他のタイプを使用している場合は、運が悪いです。

他のヒント

FYI-フルテキストインデックスは、INNODBまたはMyISAMテーブルでのみ使用でき、CHAR、VARCHAR、またはテキスト列用にのみ作成できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top