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
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

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;


4年前 评论
讨论数量: 12

现在三条 sql

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

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

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

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

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

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

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

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;


4年前 评论

laravel 不是应该用whereHas么?

4年前 评论

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