你好我在编写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职位的所有者。现在我们需要根据彼得的标签(A标签)和每个Sam的帖子中的标签来订购Sam的帖子(B帖子)。
在这种情况下,它将是:
B按重合因子DESC排序的帖子
postID | info
--------------------------------
2 | infor
1 | more
3 | mation
4 | please
5 | hahaha
我真的被困住了。我知道如何获得Sam的标签。但不是如何衡量Sam的标签和每个彼得的帖子中的标签之间的重合因素。
对不起我的英文:S
提前致谢
这里有一个小提琴...... sqlfiddle.com /#!2 / 8450c / 3
答案 0 :(得分:0)
我想我已经解决了这个问题。
这是查询
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