嗨,我不擅长编写 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 的标签与每个 Peter 帖子中的标签之间的重合系数。
对不起我的英语:S
提前致谢
这是一个 fiddle ...sqlfiddle.com/#!2/8450c/3
最佳答案
我想我已经解决了这个问题。
这是查询
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
关于mysql - 按标签获取相关帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22615761/