1

データベースに次のようなレコードがあります。

hashtag -   description -   tags -  location -  time -  day

#social -  description - social media, facebook, social networking sites, social media, smartphone - usa - Tuesday

#php -  description - programming language, coding, open source - usa - Tuesday

#iphone -  description - smartphone, apple, iphone apps, costly phone, touch screen - usa - Tuesday

ここで、タグはコンマ区切りの値です。

これで、ユーザーが検索するprogrammingと、結果はになります2nd row

"coding"  - 2nd row
"smartphone" - 3rd & 1st row.
"iphone" - 3rd row

つまり、タグを検索したり、直接ハッシュキーワードを検索したりするようなものです。最初の列はhashkeywordです。タグはデータベースにカンマ区切りで保存されます。

私はfind_in_set()これに使用していますが、正しく機能していないようです。

SELECT * FROM `hash`WHERE `hashtag` LIKE 'smartphone' OR find_in_set('smartphone', tags)

最初の行のみを返します。

iphone -    iphone description - smartphone, apple, apps, touchscreen - India   - tuesday

ただし、「スマートフォン」の値も3行目にあるため、1行目と3行目を返す必要があります。

どこが間違っているのですか?または、代わりにこのように検索するための別の方法はありfind_in_set()ますか?

4

2 に答える 2

1

カンマの後にスペースがあると、FIND_IN_SET正しく機能しません。

で見つかりますがsmartphone, apple, apps, touchscreen、で見つかりませんapple, smartphone, apps, touchscreen

別の解決策については、 mysql全文検索を試してください。

于 2013-03-25T08:42:00.247 に答える
0

find_in_set()の正しい構文は次のとおりです。

SELECT *
FROM `tablename`
WHERE FIND_IN_SET( `column`, 'val1,val2' )

編集:

LIKEをテキスト検索に使用できます。

SELECT *
FROM `tablename`
WHERE tags LIKE '%TAG%'
于 2013-03-25T08:31:20.137 に答える