选择相互关注者

Posted

技术标签:

【中文标题】选择相互关注者【英文标题】:Select Mutual Followers 【发布时间】:2018-08-20 14:27:09 【问题描述】:

我知道这里有很多问题,但没有找到适合我的答案。我正在建立一个社交网络,并且正在处理用户列表页面。在我的数据库中有两个表,users & followersusers 表中的id 列是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]);
	         
	    
	

?>

我现在只需要获取所有idfollowers 表中的follower_id 列匹配的用户,因为他们对应的user_id 列将是logged_in_user 和关注的用户之间的相互关注/跟随他/她。

【问题讨论】:

请不要绑定一些参数,绑定所有参数。 $start 是一个巨大的责任,在这里被引入而不转义。 是的,我打算这样做,只需要单独查询logged_in_user和followers/following之间的共同用户 ; 放在通过这样的代码运行的查询末尾也是一个坏习惯。只有在使用交互式 mysql shell 或定义存储过程时才需要该分隔符。 【参考方案1】:

没有答案。评论太长了...

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

1 Romeo
2 Juliet
3 Benvolio
4 Mercutio
5 Tybalt

user follows
   5       2
   4       1
   4       2
   1       3

...而是问,什么查询可以告诉我们还有谁在关注/被罗密欧关注/被关注的个人关注/被关注。

【讨论】:

嘿,这样写得更好。谢谢。【参考方案2】:

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

<?

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

?>

【讨论】:

以上是关于选择相互关注者的主要内容,如果未能解决你的问题,请参考以下文章

Instagram API 关注者列表导出

基于python的web应用开发-添加关注者

关注者/关注者数据库结构

有没有办法通过flutter查看来自云Firestore的用户的关注者或关注者?

如何使用 Instagram API 获取我的关注者的关注者列表

在 Instagram 框中向下滚动关注者/关注列表