选择共同关注者

时间:2018-08-20 14:27:10

标签: php mysql sql database social-networking

我知道这里有很多问题,但是没有答案,我发现对我有用。我正在建立一个社交网络,并且正在用户列表页面上。我的数据库中有两个表usersfollowersid表中的users列是followers表中的外键,其列为iduser_idfollower_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));

?>

谁能帮助我将这三个查询结合在一起以得到所需的结果:正在关注/正在关注的所有用户的列表,正在关注/正在关注的logged_in_user用户的列表,即共同关注者。谢谢。

更新 我找到了一些代码来帮助我删除/正在跟随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]);
	        } 
	    }
	}
}
?>

我现在要做的就是获取idfollower_id表中的followers列匹配的所有用户,因为他们对应的user_id列将是logged_in_user,用户一直关注/关注他/她。

2 个答案:

答案 0 :(得分:0)

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

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

1 Romeo
2 Juliet
3 Benvolio
4 Mercutio
5 Tybalt

user follows
   5       2
   4       1
   4       2
   1       3

...然后问什么查询可以告诉我们还有谁在跟随/正在跟随,然后是个人在跟随/正在跟随罗密欧。

答案 1 :(得分:0)

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

<?

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);

?>