У меня есть SQL-запрос для реализации в Laravel. Мой запрос:
SELECT * FROM officer_ranks ra
LEFT JOIN (SELECT * FROM officer_rank_details WHERE void = 0) AS r ON ra.rank = r.present_rank
LEFT JOIN officer_languages l ON r.officer_id = l.officer_id
GROUP BY(ra.rank)
ORDER BY ra.id ASC;
Для реализации этого запроса я написал:
DB::table('officer_ranks as ra')
->leftJoin(DB::raw('SELECT * FROM officer_rank_details WHERE void = 0'), 'ra.rank', '=', 'present_rank')
->leftJoin('officer_languages as l', 'officer_id', '=', 'l.officer_id')
->groupBy('ra.rank')
->get();
Мой вопрос в том, как получить (DB::raw(...))
таблицу результатов как r
, потому что мне нужно JOIN
таблиц.
Я пробовал использовать
leftJoin(DB::raw('SELECT * FROM officer_rank_details WHERE void = 0') as r, 'ra.rank', '=', 'present_rank')
Но это не удалось.
leftJoin(DB::raw('(SELECT * FROM officer_rank_details WHERE void = 0) as r'), 'ra.rank', '=', 'r.present_rank')
. Но исходный запрос - не лучший способ сделать это. Вам следует переместитьvoid = 0
в предложение ON. И почему вы используетеGROUP BY
без агрегатной функции? - person Paul Spiegel   schedule 07.01.2017SUM()
, чтобы подсчитать. Я не публиковал это здесь, потому что это слишком долго - person Sathindu Kavneth   schedule 07.01.2017