亲爱的 stackoverflow 成员(member),
我有四个表:members、circles、circle_members 和 member_relations。
您可以检查此链接以清楚地了解数据库架构。
http://sqlfiddle.com/#!2/1a47a6/1
现在,
John 是 id 为 1 的成员,与两个成员 [2, 4] 相关。
然而,约翰不属于任何圈子。我想将约翰添加到(最佳)圈子中。
我的意思是,在circle_members 和member_relations 之间具有最常见成员ID 的圈子。
在这种情况下,John将被添加到圈子#1中,因为这个圈子中有两个与他有关系的公共(public)ID;特别是[2, 4]。但不会被添加到第2圈,因为只有一个公共(public)id,即[4]。如果您注意到的话,#3 圈是不合适的,因为这个圈没有通用 ID。
我想使用 SQL 来实现此功能,首选 MySQL。
最诚挚的问候, 胡萨姆。
最佳答案
类似这样的事情:
select circle_id, count(*)
from member_circles mc
inner join
(
-- Get related members
select relatedMemberId
from member_relations
where member_id = 1 -- That's John
) x on x.relatedMemberId = c.member_id
group by circle_id
order by count(*) desc
(我假设 member_relations 具有 member_id 和 relatedMemberId 列。根据需要进行更改。)
这会生成一个列表,首先包含最合适的圆圈。
干杯-
关于mysql - (成员)的最佳(圆圈)取决于最佳共同点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20970684/