現在、ブログ用のタグ システムを使用しています。各ブログはブログ テーブルに挿入され、タグはタグ テーブルに挿入されます。タグ テーブルには、各タグをブログ アイテムにリンクする列 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 であるため、それはオプションではありません。
前もって感謝します!