【问题标题】:Laravel Self join QueryLaravel 自连接查询
【发布时间】:2020-04-10 16:04:56
【问题描述】:

我正在尝试在 Laravel 中执行自联接查询。我正在尝试执行与原始查询相同的操作

  $data['d_meetings'] =DB::select("select t1.*,t2.* from `leads_followup_details` as `t1` inner join `leads_followup_details` as `t2` on `t1`.`leads_enquiry_details_enquiry_id` = `t2`.`leads_enquiry_details_enquiry_id` inner join `leads_enquiry_details` on `enquiry_id` = `t1`.`leads_enquiry_details_enquiry_id` where  `t1`.`followup_meeting` = 'direct' and t1.followup_id<t2.followup_id and t1.followup_next_followup_date=t2.followup_date and `t2`.`followup_current_meeting` = 'direct'  and `enquiry_deleted` = 1 group by `t1`.`followup_id`");



$data['d_meetings'] = DB::table('leads_followup_details as t1')
        ->join('leads_followup_details as t2', 't1.leads_enquiry_details_enquiry_id', 't2.leads_enquiry_details_enquiry_id')
        ->where('t2.followup_id', '>', 't1.followup_id')
        ->where('t2.followup_id', '!=', 't1.followup_id')
        ->whereDate('t1.followup_next_followup_date', '=', 't2.followup_date')
        ->where('t1.followup_meeting', 'direct')
        ->join('leads_enquiry_details', 'enquiry_id', 't1.leads_enquiry_details_enquiry_id')->where('enquiry_deleted', 1)
        ->groupBy('t1.followup_id')->get();

but this is not working as my expectation .

请帮忙

【问题讨论】:

  • 那个 SQL 正确吗? t1t2 在同一列中连接在一起
  • 你丢失了groupBy
  • 是的.. Sql 工作正常..我在 sql 控制台上得到了预期的结果

标签: php mysql laravel join self-join


【解决方案1】:

你可以试试:

$data['d_meetings'] = DB::table('leads_followup_details as t1')
                          ->select('t1.followup_id', 't2.followup_id', 't1.followup_next_followup_date', 't2.followup_date', 't2.followup_current_meeting', 't1.followup_meeting')
                          ->join('leads_followup_details as t2','t1.leads_enquiry_details_enquiry_id','t2.leads_enquiry_details_enquiry_id')
                          ->join('leads_enquiry_details','enquiry_id','t1.leads_enquiry_details_enquiry_id')        
                          ->where('t1.followup_id','<','t2.followup_id')
                          ->where('t1.followup_id','<>','t2.followup_id')
                          ->where('t1.followup_next_followup_date','=','t2.followup_date')
                          ->where('t1.followup_meeting', 'direct')
                          ->where('t2.followup_current_meeting', 'direct')
                          ->where('enquiry_deleted',1)
                          ->groupBy('t1.followup_id')->get();

我看到你想念t2.followup_current_meeting ='direct'

【讨论】:

    【解决方案2】:

    您的->whereDate('t2.followup_date','=','t2.followup_next_followup_date') 似乎与您的 SQL and t1.followup_next_followup_date=t2.followup_date 不匹配

    如果你按照与 SQL 相同的顺序写出 Laravel 查询可能会更容易(并观察重新添加的-&gt;where('t2.followup_current_meeting', 'direct')):

      $data['d_meetings'] = DB::table('leads_followup_details as t1')
                               ->join('leads_followup_details as t2',
                                      't1.leads_enquiry_details_enquiry_id',
                                      't2.leads_enquiry_details_enquiry_id')
                               ->join('leads_enquiry_details','enquiry_id',
                                      't1.leads_enquiry_details_enquiry_id')
                               ->where('t1.followup_id','<>','t2.followup_id')
                               ->where('t1.followup_id','<','t2.followup_id')
                               ->where('t1.followup_meeting', 'direct')
                               ->where('t2.followup_current_meeting', 'direct')                           
                               ->whereDate('t1.followup_next_followup_date','=',
                                           't2.followup_date')
                               ->where('enquiry_deleted',1)
                               ->groupBy('t1.followup_id')->get();
    

    【讨论】:

    • 对不起,我在这里输入错误,但我在发布问题后编辑了问题..我没有得到正确的答案
    猜你喜欢
    • 2014-02-19
    • 2012-12-28
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多