关联数据批量获取的正确方法


场景

获取用户的粉丝列表,及查看人与粉丝之间的关系

需要数据

登录用户查看任意用户的粉丝列表,包含其中每个粉丝与查看人的关系,包括关注、拉黑等。

例如,张三查看李四的粉丝列表,其中有王五、赵六、刘七。张三关注了王五,拉黑了刘七,那么要在返回数据中体现出来。用一张图表示下:

张三视角下李四的粉丝列表
张三视角下李四的粉丝列表

获取数据的逻辑一:

  1. 获取李四的粉丝列表
  2. 循环李四的粉丝列表
  3. 逐个判断查看者张三是否关注了此粉丝,并发此关系记录在此条粉丝的数据列中
  4. 逐个判断查看者张三是否拉黑了此粉丝,并发此关系记录在此条粉丝的数据列中
  5. 循环结束,返回数据

获取数据的逻辑二:

  1. 获取李四的粉丝列表
  2. 循环李四的粉丝列表,得到粉丝的用户id列表
  3. 根据粉丝的用户id列表,查询与张三的关注关系
  4. 根据粉丝的用户id列表,查询与张三的拉黑关系
  5. 循环李四的粉丝列表
  6. 根据第三步获取的关注关系,赋值此粉丝的数据列
  7. 根据第四步获取的拉黑关系,赋值此粉丝的数据列
  8. 结束循环,返回数据

对比

两种获取数据逻辑的对比
两种获取数据逻辑的对比

附上两种实现的简化代码(看看你的代码中是否有这种写法)

逻辑一

<?php
$vistor = '张三';
$user = '李四';

$followers = getFollowers($user);
foreach ($followers as &$follower){
	$follower['是否关注'] = checkFollow($follower['name'], $vistor); //检查查看者与粉丝的关注关系
	$follower['是否拉黑'] = checkBlacklist($follower['name'], $vistor); //检查查看者与粉丝的拉黑关系
}
var_dump($followers); //输出数据

function checkFollow($username, $vistor){
	//进行数据查询
}

function checkBlacklist($username, $vistor){
	//进行数据查询
}

function getFollowers($user){
	//进行数据查询
}

逻辑二

<?php
$vistor = '张三';
$user = '李四';

$followers = getFollowers($user);
$users = array();
foreach ($followers as &$follower){
	$users[] = $follower['name'];
}

$followRelationships = getFollowRelationships($users, $vistor);
$blacklistRelationships = getBlacklistRelationships($users, $vistor);

foreach ($followers as &$follower){
	$follower['是否关注'] = isset($followRelationships[$follower['name']]) ? true : false; //根据已获取的访问者与粉丝之间的关注关系,进行赋值
	$follower['是否拉黑'] = isset($blacklistRelationships[$follower['name']]) ? true : false; //根据已获取的访问者与粉丝之间的拉黑关系,进行赋值
}
var_dump($followers); //输出数据


function getFollowRelationships($users, $vistor){
	//根据users批量获取数据
}
function getBlacklistRelationships($users, $vistor){
	//根据users批量获取数据
}

 


发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注