Объединение этого запроса с подзапросом в один запрос - PullRequest
0 голосов
/ 12 августа 2011

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

Теперь я хочу как-то оптимизировать его, чтобы у меня был только один запрос без подзапроса. Единственная проблема, я не уверен, как. На данный момент, я ищу помощь.

SELECT ... /* Lot of stuff. */
FROM `posts`

JOIN `groups`
ON (`groups`.`id` = `posts`.`group_id`)

JOIN `users`
ON (`users`.`id` = `posts`.`user_id`)

WHERE `groups`.`id` IN (SELECT `group_id` FROM `group_members` WHERE `user_id` = '33') /* My sub-query. ID '33' is variable.*/
AND `posts`.`post_id` = 0 /* For only first level posts. */

Если вам нужна структура таблицы, просто спросите. Огромное спасибо за совет!

Ответы [ 2 ]

1 голос
/ 12 августа 2011
SELECT ... /* Lot of stuff. */
FROM `posts`

JOIN `groups`
ON (`groups`.`id` = `posts`.`group_id`)

JOIN `users`
ON (`users`.`id` = `posts`.`user_id`)

JOIN `group_members`
ON (`groups`.`id` = `group_members`.`group_id`)

WHERE `group_members`.`user_id` = '33'
AND `posts`.`post_id` = 0 /* For only first level posts. */

должен сделать свое дело. По крайней мере, он должен быть эквивалентен запросу в вопросе - если он согласован, я не знаю.

0 голосов
/ 12 августа 2011

Попробуйте это

SELECT ... /* Lot of stuff. */
FROM `posts`

JOIN `groups`
ON (`groups`.`id` = `posts`.`group_id`)

JOIN `users`
ON (`users`.`id` = `posts`.`user_id`)

inner join `group_members` on (`groups`.`id` = `group_members`.`group_id`)
Where `group_members`.`user_id` = '33' AND `posts`.`post_id` = 0 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...