Mysql 如果值重复(Laravel),则连接数组

Mysql 如果值重复(Laravel),则连接数组,mysql,laravel,Mysql,Laravel,我尝试在数组中联接重复的值,但若联接的数组有不同的值,那个么应该自动创建另一个数组 这是我的代码,使用laravel上的查询生成器 DB::table('users')) ->挑选( “users.id”, “用户的名字”, “users.last_name”, “用户,无需重新命名”, “users.empid”, “用户,无需重新命名”, “users.detail”, “users.is_approve”, “users.u是否处于活动状态”, “karyawan_项目。项目id”, “p

我尝试在数组中联接重复的值,但若联接的数组有不同的值,那个么应该自动创建另一个数组

这是我的代码,使用laravel上的查询生成器

DB::table('users'))
->挑选(
“users.id”,
“用户的名字”,
“users.last_name”,
“用户,无需重新命名”,
“users.empid”,
“用户,无需重新命名”,
“users.detail”,
“users.is_approve”,
“users.u是否处于活动状态”,
“karyawan_项目。项目id”,
“project.nama as nama_project”,
“client.nama作为nama_客户”
)->左连接(
“karyawan_项目”,
'users.id'、'='、'karyawan_project.karyawan_id',
“client.nama”
)->加入(
“项目”,
“karyawan_project.project_id”、“=”、“project.id”
)->join('spk','project.spk_id','=','spk.id'))
->join('client'、'spk.client_id'、'='、'client.id')
->其中('tipe',2)
->其中('is_active',[1,0,2])
->orderBy('users.id')
->get();
结果呢

1 => {#747 ▼
  +"id": 17
  +"first_name": "Dadan R"
  +"last_name": "Hadiansyah"
  +"no_rekening": "1150006713467"
  +"empid": "01180104"
  +"detail": ""
  +"is_approve": 1
  +"is_active": 1
  +"project_id": 4
  +"nama_project": "Driver Manager & Operasional"
  +"nama_client": "PT. TRANSPORTASI GAS INDONESIA"
}
2 => {#797 ▼
  +"id": 18
  +"first_name": "Setia"
  +"last_name": "Darma"
  +"no_rekening": "1150006713475"
  +"empid": "01180105"
  +"detail": null
  +"is_approve": 1
  +"is_active": 1
  +"project_id": 181
  +"nama_project": "Driver Operasional"
  +"nama_client": "PT. TRANSPORTASI GAS INDONESIA"
}
3 => {#790 ▼
  +"id": 18
  +"first_name": "Setia"
  +"last_name": "Darma"
  +"no_rekening": "1150006713475"
  +"empid": "01180105"
  +"detail": null
  +"is_approve": 1
  +"is_active": 1
  +"project_id": 4
  +"nama_project": "Driver Manager & Operasional"
  +"nama_client": "PT. TRANSPORTASI GAS INDONESIA"
}
4 => {#796 ▼
  +"id": 18
  +"first_name": "Setia"
  +"last_name": "Darma"
  +"no_rekening": "1150006713475"
  +"empid": "01180105"
  +"detail": null
  +"is_approve": 1
  +"is_active": 1
  +"project_id": 6
  +"nama_project": "PENGAMANAN STATION MBK"
  +"nama_client": "PT. PERMATA GRAHA NUSANTARA"
}
5 => {#757 ▼
  +"id": 19
  +"first_name": "Ardian"
  +"last_name": "Ismail"
  +"no_rekening": "1150004433837"
  +"empid": "01180106"
  +"detail": null
  +"is_approve": 1
  +"is_active": 0
  +"project_id": 4
  +"nama_project": "Driver Manager & Operasional"
  +"nama_client": "PT. TRANSPORTASI GAS INDONESIA"
结果具有重复的值,其中id=18和不同的nama_项目

我想要的是,id,其中有重复的值加入到一个数组中 以及具有不同价值的nama_项目


因为您已按users.id对结果进行排序。假设将结果保存在
$users
中,则可以执行以下操作:

$usersWithMergedProjects = [];
$previous_id = 0;
foreach($users as $user){
    if($user->id == $previous_id){
        array_push($usersWithMergedProjects[$user->id]->nama_projects, $user->nama_project);
    } else {
        $usersWithMergedProjects[$user->id] = $user;
        $usersWithMergedProjects[$user->id]->nama_projects = [];
        array_push($usersWithMergedProjects[$user->id]->nama_projects, $user->nama_project);

    }
    $previous_id = $user->id;
    unset($usersWithMergedProjects[$user->id]->nama_project);
}
注意:如果您在这方面有任何错误,请拍摄错误的屏幕截图。

我找到了答案

$data = DB::table('users')
                  // ->with(['history'=>function($kar){
                  //             $kar->with('project.spk.client')->select('project_id','karyawan_id')->where('status',1);
                  //  }])
                        ->select('users.id','users.first_name','users.last_name','users.no_rekening','users.empid','users.no_rekening',
                                 'users.detail','users.is_approve','users.is_active','karyawan_project.project_id','karyawan_project.status',
                                 'project.nama as nama_project',
                                 'client.description as nama_client')
                        ->leftJoin('karyawan_project', 'users.id','=','karyawan_project.karyawan_id')
                        ->join('project','karyawan_project.project_id','=','project.id')
                        ->join('spk','project.spk_id','=','spk.id')
                        ->join('client','spk.client_id','=','client.id')
                        ->where('tipe', 2)->whereIn('is_active',[1,0,2])->orderBy('users.id')->get()
               ;

               $previous_id = 0;

               foreach($data as $key => $user){
                     $user->merged = [];
                     $user->project = '<b>'.$user->nama_client. '</b> ' . $user->nama_project;
                     if ($previous_id == $user->id) {

                           $minKey = $key-1;

                           if (!empty($data[$minKey]->merged)) {

                                 if ($user->status == 1) {
                                       array_push($user->merged, $user->project);
                                 }

                                    $user->merged = array_merge($user->merged, $data[$minKey]->merged);


                             }else {
                                   if ($user->status == 1) {
                                          array_push($user->merged, $user->project, $data[$minKey]->project);
                                   }

                            }
                       unset($data[$minKey]);

                       }else {
                               if ($user->status == 1) {
                                     array_push($user->merged,$user->project);
                               }
                       }
                       $previous_id = $user->id;
               }


            $data = $data->sortBy('first_name');   
$data=DB::table('users'))
//->with(['history'=>函数($kar){
//$kar->with('project.spk.client')->选择('project\u id','karyawan\u id')->其中('status',1);
//  }])
->选择('users.id'、'users.first\u name'、'users.last\u name'、'users.no\u rekening'、'users.empid'、'users.no\u rekening',
“users.detail”、“users.is_approve”、“users.is_active”、“karyawan_project.project_id”、“karyawan_project.status”,
“project.nama as nama_project”,
'client.description as nama_client')
->leftJoin('karyawan_项目'、'users.id'、'='、'karyawan_项目.karyawan_id')
->加入('project'、'karyawan_project.project_id'、'='、'project.id')
->join('spk','project.spk_id','=','spk.id'))
->join('client'、'spk.client_id'、'='、'client.id')
->其中('tipe',2)->其中('is_active',[1,0,2])->orderBy('users.id')->get()
;
$previous_id=0;
foreach($key=>$user形式的数据){
$user->merged=[];
$user->project='.$user->nama_客户端'.$user->nama_项目;
如果($previous_id==$user->id){
$minKey=$key-1;
如果(!empty($data[$minKey]->merged)){
如果($user->status==1){
数组推送($user->merged,$user->project);
}
$user->merged=array\u merge($user->merged,$data[$minKey]->merged);
}否则{
如果($user->status==1){
数组推送($user->merged,$user->project,$data[$minKey]->project);
}
}
未设置($data[$minKey]);
}否则{
如果($user->status==1){
数组推送($user->merged,$user->project);
}
}
$previous_id=$user->id;
}
$data=$data->sortBy('first_name');

这不是加入一个array@dennisramli,我已经编辑了我的答案,如果有任何错误,请告诉我。“array_push()希望参数1为array,如果“哪一行@den?array_push($userWithMergedProjects[$user->id]['nama_project',$user->nama_project],则为null);这一行我认为$previous\u id=$user->id;此代码应该放在if-else外部,但在foreach内部这是我想要的查询选择us.id、us.first\u name、us.last\u name、group\u concat(if(kp.status=1,concat(“”,c.description,“-”,pr.nama),NULL)分隔符“,”作为来自角色的项目r left join role\u user ru on ru.role\u id=r.id left join users us.id=ru.user\u id left join karyawan\u project kp.id=kp.karyawan\u id left join project pr on kp.project\u id=pr.id left join spk spk.id=pr.spk\u id left join client c on c on c.id=spk.client\u id其中r.name='karyawan'group by us.id订购人
us
id
ASC
$data = DB::table('users')
                  // ->with(['history'=>function($kar){
                  //             $kar->with('project.spk.client')->select('project_id','karyawan_id')->where('status',1);
                  //  }])
                        ->select('users.id','users.first_name','users.last_name','users.no_rekening','users.empid','users.no_rekening',
                                 'users.detail','users.is_approve','users.is_active','karyawan_project.project_id','karyawan_project.status',
                                 'project.nama as nama_project',
                                 'client.description as nama_client')
                        ->leftJoin('karyawan_project', 'users.id','=','karyawan_project.karyawan_id')
                        ->join('project','karyawan_project.project_id','=','project.id')
                        ->join('spk','project.spk_id','=','spk.id')
                        ->join('client','spk.client_id','=','client.id')
                        ->where('tipe', 2)->whereIn('is_active',[1,0,2])->orderBy('users.id')->get()
               ;

               $previous_id = 0;

               foreach($data as $key => $user){
                     $user->merged = [];
                     $user->project = '<b>'.$user->nama_client. '</b> ' . $user->nama_project;
                     if ($previous_id == $user->id) {

                           $minKey = $key-1;

                           if (!empty($data[$minKey]->merged)) {

                                 if ($user->status == 1) {
                                       array_push($user->merged, $user->project);
                                 }

                                    $user->merged = array_merge($user->merged, $data[$minKey]->merged);


                             }else {
                                   if ($user->status == 1) {
                                          array_push($user->merged, $user->project, $data[$minKey]->project);
                                   }

                            }
                       unset($data[$minKey]);

                       }else {
                               if ($user->status == 1) {
                                     array_push($user->merged,$user->project);
                               }
                       }
                       $previous_id = $user->id;
               }


            $data = $data->sortBy('first_name');