我有一个从多个事务中提取id_user的查询。
我只想通过只取每个数据中的1个来查找用户表中的id_user。
示例:在查询中有一个用户id 1,1,3,4
我只想用1,3,4
所以出来的名字只来自id_user 1,3,4而不是1,1,3,4
我尝试过使用独特的、截然不同的功能,但是数据被重复了几次
这是我的代码:
$arrayDiff = [];
$totalMasing = [];
$listuser = [];
if ($totalSubmitted == 1) {
for ($i = 0; $i < $totalSubmitted; $i++) {
$item = $subset[$i]['id_okr'];
$arrayDiff[] = Okr::find($item)->get();
$totalMasing[] = Interact::where('id_created', '=', $arrayDiff[0][$i]['id_created'])
->where('status', '=', '2')
->where('id_user', '=', $interact)
->count();
$listuser[] = User::find($arrayDiff[0][$i]['id_created']);
}
}else{
for ($i = 1; $i < $totalSubmitted; $i++) {
$item = $subset[$i]['id_okr'];
$arrayDiff[] = Okr::find($item)->get();
$totalMasing[] = Interact::where('id_created', '=', $arrayDiff[0][$i]['id_created'])
->where('status', '=', '2')
->where('id_user', '=', $interact)
->count();
$listuser[] = User::find($arrayDiff[0][$i]['id_created']->distinct('id_created'));
}这是我的JSON结果:
listuser: [
{},
{},
{}
]对我的问题有什么建议吗?非常感谢
发布于 2019-10-16 17:14:27
我已经用修改和注释重写了你的代码。
$arrayDiff = [];
$totalMasing = [];
$listuser = [];
$listuserids = [];
if ($totalSubmitted == 1) {
for ($i = 0; $i < $totalSubmitted; $i++) {
$item = $subset[$i]['id_okr'];
$arrayDiff[] = Okr::find($item)->get();
$totalMasing[] = Interact::where('id_created', '=', $arrayDiff[0][$i]['id_created'])->where('status', '=', '2')->where('id_user', '=', $interact)->count();
$listuserids[] = $arrayDiff[0][$i]['id_created']; // add this line
//$listuser[] = User::find($arrayDiff[0][$i]['id_created']); // remove this line
}
} else {
for ($i = 1; $i < $totalSubmitted; $i++) {
$item = $subset[$i]['id_okr'];
$arrayDiff[] = Okr::find($item)->get();
$totalMasing[] = Interact::where('id_created', '=', $arrayDiff[0][$i]['id_created'])->where('status', '=', '2')->where('id_user', '=', $interact)->count();
$listuserids[] = $arrayDiff[0][$i]['id_created']; // add this line
//$listuser[] = User::find($arrayDiff[0][$i]['id_created'])->distinct('id_created')); // remove this line
}
}
// and place query outside of loop!
$listuser[] = User::whereIn('id', $listuserids)->get();此解决方案将解决您的问题,并返回唯一的结果。它还将提高代码的性能(&T)。
(重要说明:尽量不要将查询放入循环中。)
https://stackoverflow.com/questions/58395473
复制相似问题