我有这些表:帖子(post_is,标题和文本),标签(tag_id,标签),Post_tag_nn(id,tag_id,post_id)。我想要一个特定的帖子,例如4个标签,所有帖子都带有这些标签,然后所有帖子都带有这些标签中的任意三个,然后所有帖子都带有任意两个标签,依此类推。我如何为此目的构建SQL查询(在php中,它似乎是一个回溯问题=给定集合的所有子集)。
答案 0 :(得分:6)
查询以查找当前帖子的标签,例如
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 :(得分:0)
如果你打算用一个标签来拉下每个帖子,你可能最好只为每个标签运行一个查询以拉出所有带有该标签的帖子,然后生成自己设定。
答案 2 :(得分:0)
类似的东西:
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
然后在代码中执行该组。你当然可以做两个不同的查询,一个是你弄清楚你的标签的顺序和数量,然后是一个你拉回每个标签的帖子。