使用PHP处理关注/关注者

时间:2012-09-21 10:56:50

标签: php mysql

在我的网站上,我有一个跟随对方有点推特的概念,我有一个具有以下结构的用户连接表,

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

ConnectedTo | ConnectedBy | SessionID | Connect_Status | RecordDate

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

已连接到保留您正在连接的用户

连接通过保留正在连接的用户

会话ID 再次保留正在连接的用户

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

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

B_id | A_id | A_id |连接|日期

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

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

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

A_id | B_id | B_id |连接|日期

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

现在我想要的是如果两个人都在跟随对方,我有一个叫做网络的页面,所以如果是用户A而我登录,如果我进入我的网页,我应该看到跟随我的人跟着我回来了,但我无法弄清楚我应该如何发现哪些用户跟着我...这就像谷歌加我猜测,如果你关注用户,你跟着他,但如果他跟着你回来比你回来朋友..所以我应该添加另外1个字段有点说字段 X 在连接之前我检查该用户是否关注我,我应该将这两个记录更新为字段X中的朋友。

而且P.S我尝试了很多东西,所以不要问我尝试了什么,我试过,试过但仍然无法解决

3 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分: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

答案 2 :(得分: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

将获得所有相互联系。