我知道这里有很多问题,但是没有答案,我发现对我有用。我正在建立一个社交网络,并且正在用户列表页面上。我的数据库中有两个表users
和followers
。 id
表中的users
列是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
与follower_id
表中的followers
列匹配的所有用户,因为他们对应的user_id
列将是logged_in_user
,用户一直关注/关注他/她。
答案 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);
?>