Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 24.04.2015 10:12:37

Pavel

Большой сложный запрос в конструкторе

С трудом составил большой сложный запрос с объединением четырех таблиц. Запрос 100% рабочий, но возникла проблема его записи в модели. Прошу помощи.

SELECT
	u.name name,
	u.created_at created_at,
	q1.cPosts cposts,
	q1.sPosts sposts,
	q2.cComments ccomments,
	q2.sComments scomments,
	q3.cComplaints ccomplaints
FROM
  	(users u LEFT JOIN
		(SELECT
			p.user_id,
			count(p.id)    AS cPosts,
			sum(p.raiting) AS sPosts
		FROM posts p
		GROUP BY p.user_id) AS q1
	ON u.id = q1.user_id) LEFT JOIN
		(SELECT
			c.user_id,
			count(c.id)    AS cComments,
			sum(c.raiting) AS sComments
		FROM post_comments c
		GROUP BY c.user_id) AS q2
	ON u.id = q2.user_id LEFT JOIN
		(SELECT
			com.compl_user_id,
			count(com.id) AS cComplaints
		FROM complaints com
		WHERE com.status = 1
		GROUP BY com.compl_user_id) AS q3
	ON u.id = q3.compl_user_id
GROUP BY u.name, q1.cPosts, q2.cComments, q1.sPosts, q2.sComments, q3.cComplaints
ORDER BY u.name asc

#2 24.04.2015 11:54:28

Re: Большой сложный запрос в конструкторе

чёт запрос какой-то странный. зачем GROUP BY во внешнем запросе-то? да ещё и по 6 полям!..

Не в сети

#3 24.04.2015 12:59:37

Павел

Re: Большой сложный запрос в конструкторе

Окей, можно и без группировки, но вопрос был не в этом

#4 24.04.2015 14:25:02

Re: Большой сложный запрос в конструкторе

http://laravel.com/docs/5.0/queries
опирайся на это, но запрос тебе лучше доработать

Не в сети

#5 24.04.2015 14:43:10

Павел

Re: Большой сложный запрос в конструкторе

Изучал. Там нет ни слова про подзапросы в join.

#6 24.04.2015 15:51:11

Павел

Re: Большой сложный запрос в конструкторе

Переписал запрос. теперь он проще и наглядней для восприятия. Но вопрос остается открытым. Интересует реализация вложенных запросов в SELECT.

select u.name,
  (select count(p.id)
    from posts p
    where u.id = p.user_id) as q1,
  (select sum(p.raiting)
    from posts p
    where u.id = p.user_id) as q2,
  (select count(c.id)
    from post_comments c
    where u.id = c.user_id) as q3,
  (select sum(c.raiting)
    from post_comments c
    where u.id = c.user_id) as q4,
  (select count(cmpl.id)
    from complaints cmpl
    where u.id = cmpl.compl_user_id and
    cmpl.status = 1) as q4
from users u 

#7 24.04.2015 15:54:16

Иван

Re: Большой сложный запрос в конструкторе

А как по мне никто не мешает тебе писать подзапрос в сам джоин...

return $this->select('....')
            ->leftJoin('(SELECT * ...)', '', '=', '');

#8 24.04.2015 15:56:45

Иван

Re: Большой сложный запрос в конструкторе

А вообще по идее через замыкание можно

Подвал раздела