-2

まず私の英語で申し訳ありません...

データベースにタグフィールドがあり、次のように検索しています

SELECT * FROM table WHERE tags LIKE '%$keyword%' and tags LIKE '%$keyword%'

のようにタグをスペースで区切ります。

 america  england  france 

テーブル構造を見せたい

id | title | tags

1    title1  america france
2    title2  american english
3    title3  england  french

たとえば、「アメリカ」を検索したい場合

americaamericanタグは同じ単語のように見えるため、結果は title1 と title2 になり ます。

どうすればそれらをユニークにすることができますか? america を検索すると、結果は title1 のみになるはずです...

ご協力いただきありがとうございます。私の質問を理解していただければ幸いです。よい一日を

編集 :

アカムのおかげで、彼は解決策を書いた

4

2 に答える 2

1

次のようなものを使用できます。

SELECT *
FROM tbl
WHERE CONCAT(' ', tags, ' ') LIKE CONCAT('% ', 'america', ' %')

ここでフィドルを参照してください。

于 2013-02-27T21:01:12.280 に答える
0

単語境界修飾子を使用して LIKE の代わりに MySQL の REGEXP を使用して、単語全体のみに一致させることもできます。クエリは次のようになります。

SELECT * FROM table WHERE tags REGEXP '[[:<:]]$keyword[[:>:]]';

これには、必要に応じて、単一のクエリで特定のタグ セットのいずれか (またはすべて) に一致する行を検索できるという追加のボーナスがあります。

SELECT * FROM table WHERE tags REGEXP '[[:<:]]$keyword_one[[:>:]]|[[:<:]]$keyword_two[[:>:]]'

REGEXP 条件の両方の式の間のパイプ|文字に注意してください。これは、これらのタグの少なくとも 1 つに一致するすべてのレコードに一致することを意味します。

LIKE私はこのアプローチでパフォーマンスを個人的にテストしたことはありませんが、他の StackOverflow の投稿で、最初にワイルドカードを使用したものとほとんど同じであると読みました%(そのタイプのクエリでは MySQL がインデックスを使用しないため)。だから私はこれがあなたにとって最善の策だと思います。

詳細はこちら: http://dev.mysql.com/doc/refman/5.1/en/regexp.html

于 2013-02-27T22:09:51.817 に答える