2014-09-05 1 views
0

Я выполняю этот запрос с помощью конструктора запросов Laravel с левым соединением с двумя таблицами, связанными с столбцом s_nid. С таблицей я остался присоединением к conference_report, есть много строк с одним s_nid, и я хочу только вернуть строку с самой последней датой. Я смотрел на Groupwise Maximum с некоторыми примерами здесь, на SO, который является новым для меня, и я думаю, что мне нужно выполнить запрос, но я не уверен, как его реализовать на столе, к которому я присоединяюсь.Laravel получить самую последнюю дату соединения таблицы

$data['students'] = DB::table('educational_report') 
     ->select('educational_report.s_nid as s_nid' 
       ,'educational_report.name as name' 
       ,'educational_report.file_no as file_no' 
       ,'educational_report.university as university' 
       ,'conference_report.conference_end_date as conference_end_date' 
       ,'student_status.status as status') 
     ->leftJoin('student_status', 'student_status.s_nid', '=', 'educational_report.s_nid') 
     ->leftJoin('conference_report', 'conference_report.s_nid', '=', 'educational_report.s_nid') 
     ->distinct() 
     ->groupBy('s_nid') 
     ->paginate(10); 

Возможно полезные ссылки:

Performing a Groupwise Maximum in Laravel 4

Groupwise maximum

http://dev.mysql.com/doc/refman/5.6/en/example-maximum-column-group-row.html

ответ

0

Я думаю, что я был более усложнять без всякой необходимости. Мне удалось решить это с помощью вложенного запроса на объединение, как так:

$data['students'] = DB::table('educational_report') 
     ->select('educational_report.s_nid as s_nid' 
       ,'educational_report.name as name' 
       ,'educational_report.file_no as file_no' 
       ,'educational_report.university as university' 
       ,'cr2.conference_end_date as conference_end_date' 
       ,'student_status.status as status') 
     ->leftJoin('student_status', 'student_status.s_nid', '=', 'educational_report.s_nid') 
     ->leftJoin(DB::raw('(select s_nid, MAX(conference_end_date) conference_end_date 
           from conference_report GROUP BY s_nid) as cr2'), function ($join) { 
            $join->on ('cr2.s_nid', '=', 'educational_report.s_nid'); 
        }) 
     ->paginate(10); 

Это, кажется, работает правильно, но я бы увлечена за любые ответы, которые могут исправить то, что я делаю или обеспечить лучшее способ сделать это. Спасибо :)

 Смежные вопросы

  • Нет связанных вопросов^_^