Присоединиться внутри, где пункт в laravel - PullRequest
0 голосов
/ 02 апреля 2020

Я делаю запрос для вычисления уникальной суммы из 5 вкладок.
Текущий лог c равен

Количество проектов (308) = количество (tab1 + tab2 + tab3 + tab4 + tab5)

Но нужно изменить логи c на: отображение количества уникальных проектов из всех 5 вкладок. Так как проект из одной вкладки может быть и в другой вкладке.

enter image description here

Сейчас я объединяю код sql для всех 5 вкладок в одном запросе, чтобы найти общее количество уникальных проектов. Объединение первых 3 вкладок не представляло особой сложности, поскольку в них объединялись общие таблицы, но для 4-й и 5-й вкладок они объединяются с другими таблицами для определения количества.
Теперь я думаю, что запросы на соединение для 4-й и 5-я вкладка вообще не работает.

Вот запрос, чтобы найти счет 4-й вкладки.

$countComplete = DB::table('t_project as pro')
        ->leftjoin('t_project_cellphone as co', 'pro.id','=','co.project_id')
        ->leftjoin('t_contract_cellphone as tdic','pro.id','=','tdic.project_id')
        ->whereIn('pro.status', [9,10,11,12,13,14,15,16,17,18,22])
        ->where('pro.revisit_status',0)
       // ->where('co.cancel_user',  0)
        ->where('co.s_display_4', 0)
        ->whereNotNull('tdic.reg_completed_at')
        ->groupby('pro.id')
        ->count();

Вот запрос, чтобы узнать общее количество уникальных проектов.

$projectcount = DB::table('t_project as pro')
                    ->leftjoin('t_project_cellphone as co', 'pro.id','=','co.project_id')
                    // ->leftjoin('t_contract_cellphone as tdic','pro.id','=','tdic.project_id')
                    // ->leftjoin('t_project_completed_cellphone as tcc', 'pro.id','=', 'tcc.project_id')
                    ->where(function($join){
                        $join
                        ->where(function($join1){
                            $join1->whereIn('pro.status', [9,10,11,12,13,14,15,16,17,18,22,CellPhoneStatus::DISAPPROVAL])
                                ->where('pro.product_id', 1)
                                ->where('co.s_display_1', 0);
                        })
                        ->orWhere(function($join2){
                            $join2->whereIn('pro.status', [9,10,11,12,13,14,15,16,17,18,22])
                                ->where('co.s_display_2', 0)
                                ->where('co.biz_status','=',1);

                        })
                        ->orWhere(function($join3){
                            $join3->whereIn('pro.status', [9,10,11,12,13,14,15,16,17,18,22])
                                ->where('co.s_display_3', 0)
                                ->where('pro.revisit_status',0)
                                ->where(function($join31){
                                    $join31->where('co.ship_status',1)
                                        ->orwhere('co.ship_battery_status',1);
                                });
                        })
                        ->orWhere(function($join4){
                            $join4
                            // ->leftjoin('t_contract_cellphone as tdic','pro.id','=','tdic.project_id')
                                ->leftjoin('t_contract_cellphone as tdic', function($join41){
                                    $join41->on('pro.id','=','tdic.project_id')
                                    ->whereNotNull('tdic.reg_completed_at');
                                })
                                 ->whereIn('pro.status', [9,10,11,12,13,14,15,16,17,18,22])
                                ->groupby('pro.id')
                                ->where('co.s_display_4', 0);

                        })
                        ->orWhere(function($join5){
                            $join5
                                // ->leftjoin('t_project_completed_cellphone as tcc', 'pro.id','=', '.project_id')
                                ->leftjoin('t_project_completed_cellphone as tcc', function($join51){
                                    $join51->on('pro.id','=','tcc.project_id')
                                    ->where('tcc.total_complete_status', 1);
                                })
                                ->whereIn('pro.status', [9,10,11,12,13,14,15,16,17,18,22])
                                ->where('co.s_display_5', 0);
                        })
                        ;
                    })
                    ->where('pro.revisit_status',0)
                    ->count();  

Может кто-нибудь помочь мне решить эту проблему при присоединении?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...