laravel如何查询相互关注的用户列表

# 用户 a 如何查询与 a 互粉的用户

# 关注表 u1 当前用户 u2 被关注用户

当前代码

$ids1=Follow::select('uid')->whereMid($mid)->get();
$data=[];
if($ids1){
    $ids3=[];
    foreach($ids1 as $k =>$v){
        $ids3[$v['uid']]=$v['uid'];
    }
    $ids2=Follow::whereUid($mid)->select('mid')->get();
    foreach($ids2 as $k =>$v){
           $ids1[]=$ids3[$v['mid']];
    }
    $data=Member::select('uid','avatar','nickname')->whereIn('uid',$ids1)->paginate(10);
}
xcz196
打赏
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

follower 是粉丝, user 是被关注的人
| id | follower_id | user_id |
| 1 | 2 | 1 |
| 2 | 3 | 1 |
| 3 | 1 | 2 |
| 4 | 1 | 3 |
| 5 | 4 | 1 |

# 子查询
select user_id
from person
where follower_id = 1
  and user_id in
      (
          select follower_id
          from person
          where user_id = 1
      );

# 联表查询
select p1.follower_id, p1.user_id, p2.follower_id, p2.user_id
from person p1,
     person p2
where p1.user_id = 1
  and p2.user_id = p1.follower_id
  and p2.follower_id = 1;

# inner join
select p1.follower_id, p1.user_id, p2.follower_id, p2.user_id
from person p1
         join person p2
              on p1.user_id = 1 and p2.user_id = p1.follower_id and p2.follower_id = 1;


5年前 评论
讨论数量: 12

现在三条 sql

# 查当前用户关注
# 查我被谁关注
# 查我的好友信息
5年前 评论

查出我的所有粉丝 followers 和所有我关注 following 的人 匹配 followers 和 following 相等的记录,就是互粉的人。

5年前 评论
xcz196 (楼主) 5年前
ncccc1 5年前

干嘛不弄中间表,好友关系,关注我,我关注 都在中间表上体现

5年前 评论
xcz196 (楼主) 5年前

做个中间表,关联当前用户与被关注用户的id,通过多对多的方式进行查询

5年前 评论
xcz196 (楼主) 5年前
xcz196 (楼主) 5年前

follower 是粉丝, user 是被关注的人
| id | follower_id | user_id |
| 1 | 2 | 1 |
| 2 | 3 | 1 |
| 3 | 1 | 2 |
| 4 | 1 | 3 |
| 5 | 4 | 1 |

# 子查询
select user_id
from person
where follower_id = 1
  and user_id in
      (
          select follower_id
          from person
          where user_id = 1
      );

# 联表查询
select p1.follower_id, p1.user_id, p2.follower_id, p2.user_id
from person p1,
     person p2
where p1.user_id = 1
  and p2.user_id = p1.follower_id
  and p2.follower_id = 1;

# inner join
select p1.follower_id, p1.user_id, p2.follower_id, p2.user_id
from person p1
         join person p2
              on p1.user_id = 1 and p2.user_id = p1.follower_id and p2.follower_id = 1;


5年前 评论

laravel 不是应该用whereHas么?

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!