現在、ブログ用のタグ システムを使用しています。各ブログはブログ テーブルに挿入され、タグはタグ テーブルに挿入されます。タグ テーブルには、各タグをブログ アイテムにリンクする列 blog_id があります。
だから、私たちが持っているとしましょう:
Blog table:
id - name
20 - a nice blog post about product x
Tag table:
id - blog_id - tag
12 - 20 - nice
13 - 20 - product x
検索文字列に基づいてタグを検索する検索機能があり、正常に機能します。
しかし、クエリを拡張して複数のタグを検索し、最も一致するもので並べ替えたいと思います。複数のタグを検索しても問題はありません。検索文字列を展開してループすることができるからです。
3 つのブログ投稿があり、それぞれに次のタグが付いているとします:
1. 晴れ、インイヤー、イヤホン、レビュー
2. 梨、アウトイヤー、イヤホン、レビュー
3. 梨、インイヤー、イヤホン、レビュー
そして、ユーザーが「ナシ インイヤー イヤホン」と検索した場合、結果の順序を
3. (3 つのタグが一致する
ため) 1. (2 つのタグが一致する
ため) 2. (1 つのタグが一致するため) のようにしたいと考えています。
クエリは次のようになります。
SELECT `b`.*
FROM (`ブログ` b)
どこ (
b.name LIKE '%pear インイヤー イヤホン%'
また
b.id IN (
bt.blog_id を選択
FROM blog_tags bt
WHERE bt.tag LIKE '%pear インイヤー イヤホン%'
AND bt.blog_id = b.id
)
)
ORDER BY `b`.`date` desc
誰が私を助けてくれますか?
「全文検索」を見てきましたが、テーブルが InnoDB であるため、それはオプションではありません。
前もって感謝します!