相互非共同的朋友查询mysql

时间:2012-08-20 13:20:33

标签: mysql

大家好,我现在已经尝试了很多年了。

我在这里已经阅读了很多问题,并尝试根据我的需要调整各种解决方案但没有结果。

历史:

对于一个活动有很多参与者。 参与者在活动中彼此相遇,并向他们真正喜欢的所有其他参与者发出“喜欢”。

在活动结束时,管理员会为THAT事件的每个参与者插入所有喜欢的内容,系统会找到相互喜欢的(友情)

问题: 在插入喜欢的时候,我希望(双关)系统检测天气已经建立了友谊(也来自其他事件),如果是,则避免在设置喜欢时显示该用户名。

以下是我正在使用的表(mysql)

wp_fd_users

id | user_name | user_gender | ..等等

wp_fd_matches

id | event_id | event_user_id | event_user_match_id | ......等等。

匹配表的示例

1 | 1 | 1 | 3 | ...
2 | 1 | 1 | 4 | ...
3 | 1 | 2 | 6 | ...
4 | 1 | 3 | 1 | ...

你可以清楚地看到1< - > 3有相互关系,1喜欢4但不相互。 我需要一个查询来返回所有已在一个事件中建立的AVOID关系的结果。

出现这样的事:

1 | 1 | 1 | 3 | ...
2 | 1 | 1 | 4 | ...
3 | 1 | 2 | 6 | ...
4 | 2 | 3 | 1 | ...

不会触发,因为它发生在两个单独的事件中

希望很清楚

1 个答案:

答案 0 :(得分:0)

你的问题有点不清楚。我要经历:“我需要一个返回所有结果的查询,这些结果可以避免在一个单一事件中建立关系。”

以下自我加入实现了这一点:

select m1.*
from wp_fd_matches m1 left outer join
     wp_fd_matches m2
     on m1.event_id = m2.event_id and
        m1.event_user_id = m2.event_user_match_id
        m1.event_user_match_id = m2.event_user_id
where m2.id is null

查找匹配记录。但是,通过使用左外连接,它将获取所有记录。然后它过滤掉匹配的那些。