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
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

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;


2年前 评论
讨论数量: 12

现在三条 sql

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

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

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

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

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

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

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

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;


2年前 评论

laravel 不是应该用whereHas么?

2年前 评论

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