質問

このテーブルがあります:投稿(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つは各タグの投稿をプルバックします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top