mysqlの特定の1つの投稿でタグに関連する投稿を見つける
-
06-07-2019 - |
質問
このテーブルがあります:投稿(post_is、タイトルとテキスト)、タグ(tag_id、タグ)、Post_tag_nn(id、tag_id、post_id)。たとえば、4つのタグを持つ特定の投稿があり、それらのタグを持つすべての投稿、それらのタグのうち3つを持つすべての投稿、それらのタグのうち2つを持つすべての投稿などが必要です。この目的のためにSQLクエリを作成するにはどうすればよいですか(PHPではバックトラックの問題=特定のセットのすべてのサブセットのようです)。
解決
クエリを実行して、現在の投稿のタグを見つけます。次のようなものです
SELECT tag_id
FROM Post_tag_nn
WHERE post_id = $post_id;
これらのタグIDを使用すると、このクエリは4,3,2、...一致するタグを持つ投稿のIDを返します:
SELECT post_id, COUNT(post_id) AS tag_count
FROM Post_tag_nn
WHERE tag_id IN ($array_of_tag_ids)
GROUP BY post_id
ORDER BY tag_count DESC;
他のヒント
とにかく、タグが1つでもすべての投稿をプルダウンする場合は、タグごとに1つのクエリを実行して、そのタグを持つすべての投稿をプルしてから、自分を設定します。
次のようなもの:
select t.id, t.tag_id, p.post_id, p.title, p.text
from post_tag_nn as t, posts p
where p.id = t.post_id
order by t.id
そして、コードでグループを実行します。もちろん、2つの異なるクエリを実行できます。1つはタグの順序と数を把握し、1つは各タグの投稿をプルバックします。
所属していません StackOverflow