Select 相互关注

Select Mutual Followers

我知道这里有很多问题,但我找不到适合我的答案。我正在构建一个社交网络,并且正在处理用户列表页面。在我的数据库中有两个 table,usersfollowersusers table 中的 id 列是 followers table 中的外键,其列为 id, user_id & follower_idfollower_id 是关注 user_id 用户的用户的用户 ID。

在显示我要排除的社交网络上所有用户的列表时: 1)被logged_in_user关注的用户 2)关注logged_in_user

的用户

在显示所有用户列表时,我还想优先显示所有共同关注者。

这是我当前的查询($userid 指的是 logged_in_user$start 是用户加载更多用户时发送的整数)

<?

//list of users following the `logged_in_user`
$followers = $db->query(
        'SELECT followers.id, followers.user_id, followers.follower_id, users.id, users.username, users.profileimg 
        FROM followers, users 
        WHERE followers.user_id=:userid 
        AND followers.follower_id=users.id 
        LIMIT 8 OFFSET '.$start.';', array(':userid'=>$userid));

//list of users being followed by the `logged_in_user`
$following = $db->query(
        'SELECT followers.id, followers.user_id, followers.follower_id, users.id, users.username, users.profileimg 
        FROM followers, users 
        WHERE followers.follower_id=:userid 
        AND followers.user_id=users.id 
        LIMIT 8 OFFSET '.$start.';', array(':userid'=>$userid));

//list of all users: here I excluded the `logged_in_user`
$users = $db->query(
        'SELECT users.id, users.username, users.profileimg, users.gender, users.last_seen 
        FROM users 
        WHERE users.id!=:userid 
        LIMIT 8 OFFSET '.$start.';', array(':userid'=>$userid));

?>

任何人都可以帮助我将这三个查询联系在一起以获得所需的结果: following/being 的所有用户的列表,其次是 following/being 的用户,其次是 logged_in_user 即相互追随者。谢谢。

更新 我找到了一些代码来帮助我删除用户 following/being 后跟 logged_in_user

<?

//remove followers from list of users
foreach ($followers as $fr) {
 foreach($users as $elementKey => $element) {
     foreach($element as $valueKey => $value) {
         if($valueKey == 'username' && $value == $fr['username']){
             //delete this particular object from the $users
             unset($users[$elementKey]);
         } 
     }
 }
}

//remove users following logged_in_user from list of users
foreach ($following as $fg) {
 foreach($users as $elementKey => $element) {
     foreach($element as $valueKey => $value) {
         if($valueKey == 'username' && $value == $fg['username']){
             //delete this particular object from the $users
             unset($users[$elementKey]);
         } 
     }
 }
}
?>

我现在需要的是获取 idfollowers table 中的 follower_id 列匹配的所有用户,因为他们对应的 user_id 列将成为 logged_in_user 和用户 followed/following him/her 之间的相互关注者。

不是答案。评论太长了...

如果是我,我会从这样的东西开始(包括相同的 DDL)...

1 Romeo
2 Juliet
3 Benvolio
4 Mercutio
5 Tybalt

user follows
   5       2
   4       1
   4       2
   1       3

...而是问,什么查询可以告诉我们还有谁是 following/being,其次是个人 following/being,其次是 Romeo。

在上面的更新之后,我接下来所做的就是 运行 另一个获取所需用户的查询。

<?

foreach ($users as $ur) {
 $user_id = $ur['id'];
 $mutual[]= $db->query('SELECT followers.id, followers.user_id, followers.follower_id, users.id, users.username, users.profileimg FROM followers, users WHERE followers.follower_id=:userid AND followers.user_id=users.id LIMIT 100 OFFSET '.$start.';', array(':userid'=>$user_id));
}

echo json_encode($mutual);

?>