【问题标题】:finding the posts related by tags with one specific post in mysql在 mysql 中查找与特定帖子相关的标签的帖子
【发布时间】:2010-11-16 00:15:13
【问题描述】:

我有这个表:帖子(post_is,标题和文本),标签(tag_id,tag),Post_tag_nn(id,tag_id,post_id)。我想要一个特定的帖子,例如有 4 个标签,所有带有这些标签的帖子,然后是带有任何三个标签的所有帖子,然后是带有任何两个标签的所有帖子,依此类推。我如何为此目的构建 SQL 查询(在 php 中,这似乎是一个回溯问题=给定集合的所有子集)。

【问题讨论】:

    标签: sql mysql tags many-to-many


    【解决方案1】:

    查询当前帖子的标签,例如

    SELECT tag_id
    FROM Post_tag_nn
    WHERE post_id = $post_id;
    

    然后使用这些标签 ID,此查询应返回您的帖子 ID 与 4,3,2,... 匹配标签:

    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;
    

    【讨论】:

      【解决方案2】:

      如果你打算用一个标签来拉下每一个帖子,你最好只对每个标签运行一个查询来拉出所有带有该标签的帖子,然后生成设置自己。

      【讨论】:

      • 我正在寻找一种 sql 方法来执行此操作,它比硬编码更有效。
      【解决方案3】:

      类似:

      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
      

      然后在您的代码中进行分组。你当然可以做两种不同的查询,一种是你找出标签的顺序和数量,另一种是你为每个标签拉回帖子。

      【讨论】:

        猜你喜欢
        • 2014-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-09
        • 1970-01-01
        • 2018-12-15
        • 2013-01-10
        相关资源
        最近更新 更多