2010-06-07 5 views
0

안녕하세요. 여러 테이블에서 유니언을하고 있습니다. 조금 길지만 작동합니다!mysql에서 UNION을 수행 할 때 어떻게해야합니까? 결과에 대한 위치는 어디입니까?

(SELECT user_id,added_date,group_id,'joined',0,0,'' FROM group_members WHERE status = 1) 
UNION 
(SELECT user_id,added_date,object_id,'made a comment',0,0,'' FROM comments WHERE object_type = 11 AND status = 1) 
UNION 
(SELECT user_id,added_date,group_id,'made the event',1,group_calendar_id,title FROM group_calendars WHERE status = 1) 
UNION 
(SELECT comments.user_id,comments.added_date,group_calendars.group_id,'made a comment on the event',1,group_calendar_id,'' FROM group_calendars 
     INNER JOIN comments ON group_calendars.group_calendar_id = comments.object_id WHERE group_calendars.status = 1 AND comments.status = 1 AND object_type = 10 
) 
UNION 
(SELECT user_id,pd.added_date,pd.object_id,'uploaded a photo',2,pd.photo_data_id, 
    (SELECT varchar_val FROM photo_data WHERE data_id = 1 AND photo_data.photo_id = photos.photos_id AND object_type = 3 AND object_id = pd.object_id) 
    FROM photo_data pd 
     INNER JOIN photos ON photos.photos_id = pd.photo_id 
    WHERE photos.photo_status = 1 AND pd.status = 1 AND pd.data_id = 0 AND pd.object_type = 3 
) 

UNION 
(SELECT cp.user_id,cp.added_date,cp.object_id,'made a comment on the photo',2,pd.photo_data_id, 
(SELECT varchar_val FROM photo_data WHERE data_id = 1 AND photo_data.photo_id = photos.photos_id AND object_type = 3 AND object_id = pd.object_id) 
FROM comments cp 
    INNER JOIN photo_data pd ON pd.photo_data_id = cp.object_id 
    INNER JOIN photos ON photos.photos_id = pd.photo_id 
WHERE cp.object_type = 8 AND cp.status = 1 AND pd.status = 1 AND pd.data_id = 0 AND photos.photo_status = 1 AND pd.object_type = 3 
) 
UNION 
(SELECT user_id,added_date,group_id,'made a topic',3,forum_topic_id,title FROM forum_topics WHERE forum_categories_id = ".GROUP_FORUM_CATEGORY." AND group_id > 0 AND status = 1) 
UNION 
(SELECT forum_comments.user_id,forum_comments.added_date,group_id,'made a comment on the topic',3,forum_comments.forum_topic_id,title FROM forum_comments 
INNER JOIN forum_topics ON forum_comments.forum_topic_id = forum_topics.forum_topic_id 
WHERE forum_topics.forum_categories_id = 16 AND forum_topics.group_id > 0 AND forum_topics.status = 1 AND forum_comments.status = 1 
) 

이것은 일련의 그룹에서 모든 활동을 가져옵니다. 내 질문은 결국 그룹이 활동하고 있는지 확인하고자하는 것입니다.

그래서 마지막에 WHERE 같은 것을하고 싶어 (그룹에서 SELECT COUNT (1) g WHERE g.group_id = GROUP_ID AND를 상태 = 1) = 1

그 일을 어떤 방법이 있나요?

+0

UNION의 쿼리에서 그룹이 다양한 테이블과 어떤 관련이 있습니까? –

답변

0

뷰 또는 임시 테이블에 저장하고 뷰를 쿼리하는 것이 좋습니다. 나는 당신이 두번의 호출을 가질 것이라는 것을 안다. 그러나 실제로 mysql에서 그렇게 더 빠르다.

+0

감사합니다. 다른 아이디어가 있습니다. –

+0

사실 나는 주변 선택을 한 다음 각 조합에 더 많은 선택을 한 테이블로 이름을 붙여야했고, 그 다음에 내 할 수있었습니다. –

관련 문제