1

在我的网站中,我有一个互相关注的概念,有点推特,我有一个具有以下结构的用户连接表,

==================================================== =============

连接到 | 连接者 | 会话ID | 连接状态 | 记录日期

==================================================== =============

ConnectedTo持有您要连接的用户

Connected By 持有正在连接的用户

SessionID再次持有正在连接的用户

现在假设我们假设用户 A 连接到用户 B 表条目将像

================================

B_id | A_id | A_id | 连接 | 日期

================================

现在A跟随B,现在即使B跟随A条目也会像

================================

A_id | B_id | B_id | 连接 | 日期

================================

现在我想要的是如果两者都在互相关注,我有一个叫做网络的页面,所以如果我是用户 A 并且我登录,如果我去我的网络页面,我应该看到正在关注的人正在关注我,但是无法弄清楚我应该如何检测哪些用户正在关注我……这就像谷歌加我猜想,如果你关注一个用户,你就在关注他,但是如果他关注你而不是你的朋友..所以我应该再添加 1 个字段,有点说是字段X,在连接之前我检查该用户是否在关注我,我应该将两个记录更新为字段 X 中的朋友。

PS我尝试了很多东西,所以不要问我尝试了什么,我尝试过,尝试过,但仍然无法做出判断

4

3 回答 3

1
$query = "SELECT c.ConnectedTo, cc.ConnectedBy
          FROM connections c
          LEFT JOIN connections cc ON c.ConnectedTo=cc.ConnectedBy AND cc.ConnectedTo='" . $loged['my_loged_user_id'] . "'
          WHERE c.ConnectedBy='" . $loged['my_loged_user_id'] . "'";
$sql = $mysqli->query($query);
while($row = $sql->fetch_assoc()) {
    if(isset($row['ConnectedBy'])) {
        // I'm connected with $row['ConnectedTo'] who is also following me
    } else {
       // I'm connected with $row['ConnectedTo'] but he don't follows me
    }
}
于 2012-09-21T11:07:16.073 回答
1

假设您的用户 ID 是@id,连接表名称是CONNECTION。然后以下查询将列出所有与您连接的用户的 ID:

select 
   me2friend.ConnectedTo
from 
   CONNECTION me2friend,
   CONNECTION friend2me
where
   me2friend.ConnectedBy = @id and
   me2friend.ConnectedTo = friend2me.ConnectedBy and
   friend2me.ConnectedTo = @id
于 2012-09-21T11:13:02.020 回答
0

这似乎是一个非常简单的问题。您只需先查询用户是否已经有连接,看看是否应该将其设为相互连接。

SELECT * FROM tbl_connections WHERE ConnectedTo = $foreign_user_id OR connectedBy = $foreign_user_id

一旦你有你的行(或没有),你判断关系的方向并根据需要附加用户 ID:

if($result->rowCount() > 0){
    foreach($result as $row){
        if($row['ConnectedTo'] == $my_user_id) $row['ConnectedBy'] = $foreign_user_id;
        if($row['ConnectedBy'] == $my_user_id) $row['ConnectedTo'] = $foreign_user_id;
        $row['Connect_Status'] = 2; // 2 denotes that it is a mutual connection on the graph
        // Save row
        break;
    }
}else{
    // Insert new row
}

这只是一个快速的临时答案。

确实,它不是最优雅的解决方案,但它在如何以及何时建立相互关系方面提供了更大的力量。您会注意到 G+ 上的两个人之间的双重关系并不总是意味着朋友。它实际上也取决于您将它们放入的组。

编辑

上面的代码只会在你结交新朋友时使用。查询时,您可以只查询所有行,然后显示一个由 connect_status 判断的相互连接的标签,或者您可以只查询该 connect_status:

SELECT * FROM tbl_connections WHERE Connect_status = 2

将获得所有相互联系。

于 2012-09-21T11:10:26.763 回答