2011-08-12 5 views
0

범주, 그룹 및 게시물이있는 커뮤니티와 같은 것이 있습니다. 사용자와 관련된 모든 게시물을 선택해야합니다. 이러한 관계는 제가 회원 인 모든 그룹에서 만들어진 모든 게시물이 필요하다는 것입니다. 하위 쿼리를 사용하여 쿼리를 수행합니다.하위 쿼리와이 쿼리를 하나의 쿼리로 결합

이제 하위 쿼리없이 단 하나의 쿼리 만 있으므로 어떻게 든 최적화하고 싶습니다. 문제는, 나는 잘 모르겠다. 이 시점에서, 나는 도움을 찾고있다.

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. */ 

테이블 구조가 필요한 경우 문의하십시오. 조언에 큰 감사!

답변

1
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

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 
관련 문제