【问题标题】:Get related posts by tags通过标签获取相关帖子
【发布时间】:2014-05-02 04:26:29
【问题描述】:

嗨,我不擅长编写 mysql 查询(我正在努力)。

你们能帮我解决这个问题吗?

我有一个标签表:

id | tag
--------------------------------
1  | css
2  | c++
3  | perl
4  | sql
5  | pyhton

另一个 PostsA_tags 表:

id | postID | tag
--------------------------------
1  | 1      | 1
2  | 1      | 2
3  | 2      | 1
4  | 2      | 3
5  | 3      | 3

另一个 PostsB_tags 表:

id | postID | tag
--------------------------------
1  | 1      | 2
2  | 2      | 3
3  | 2      | 1
4  | 3      | 4
5  | 3      | 5

另一张 PostA 表:

postID | info
--------------------------------
1      | this
2      | is
2      | infor
3      | mation
4      | lol

另一张 PostB 表:

postID | info
--------------------------------
1      | more
2      | infor
3      | mation
4      | please
5      | hahaha

所以现在,挑战是从 A 帖子中排序 B 帖子。

这意味着如果 Peter 是 A 帖子的所有者,我们需要从他的所有帖子中获取他的所有标签。在这种情况下,它将是:

css, c++, perl

虽然,Sam 是 B 个帖子的所有者。现在我们需要根据 Peter 的标签(A 标签)和每个 Sam 帖子的标签之间的重合度来对 Sam 的帖子(B 帖子)进行排序。

在这种情况下,它将是:

B 帖子按重合因子 DESC 排序

postID | info
--------------------------------
2      | infor 
1      | more
3      | mation
4      | please
5      | hahaha

我真的被困住了。我知道如何获取 Sam 的标签。但不是如何衡量 Sam 的标签与每个 Peter 帖子的标签之间的重合因子。

对不起我的英语:S

提前致谢

这是一个小提琴... sqlfiddle.com/#!2/8450c/3

【问题讨论】:

  • 不幸的是,我不太明白其中的逻辑——还有“a”、“b”、“sam”、“peter”——这有点令人困惑。而且...请注意,链接表中的代理 id 列都是多余的,因为您有一个自然的 PK。最后,这里提供的数据集与小提琴中的不同(我怀疑是打字错误)。
  • 所以,如果我理解正确... A2 和 B2 是“最接近的”,因为它们的标记相同。但是 A1 更类似于 B2 还是 B1,为什么?
  • 没有。很难解释。 B2 之所以排在最前面是因为 B2 的标签与 Sam 的 css、c++、perl 的标签有更多的重合。 Sam 的标签是所有 A 帖子的所有标签,并且是唯一的。

标签: mysql tags posts relation


【解决方案1】:

我想我已经解决了这个问题。

这里是查询

SELECT *, SUM(`PostsA_tags`.`tag` = `PostsB_tags`.`tag`) as rel FROM `PostsB_tags`
LEFT OUTER JOIN `PostsA_tags` `PostsA_tags` ON(`PostsA_tags`.`tag` = `PostsB_tags`.`tag`)
GROUP BY `PostsB_tags`.`postID`
ORDER BY rel DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 2015-12-27
    • 2020-11-08
    相关资源
    最近更新 更多