【发布时间】:2018-08-20 14:27:09
【问题描述】:
我知道这里有很多问题,但没有找到适合我的答案。我正在建立一个社交网络,并且正在处理用户列表页面。在我的数据库中有两个表,users & followers。 users 表中的id 列是followers 表中的外键,其列是id、user_id 和follower_id。 follower_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]);
}
}
}
}
?>
我现在只需要获取所有id 与followers 表中的follower_id 列匹配的用户,因为他们对应的user_id 列将是logged_in_user 和关注的用户之间的相互关注/跟随他/她。
【问题讨论】:
-
请不要绑定一些参数,绑定所有参数。
$start是一个巨大的责任,在这里被引入而不转义。 -
是的,我打算这样做,只需要单独查询logged_in_user和followers/following之间的共同用户
-
将
;放在通过这样的代码运行的查询末尾也是一个坏习惯。只有在使用交互式 MySQL shell 或定义存储过程时才需要该分隔符。
标签: php mysql sql database social-networking