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