2013-03-31 3 views
1

두 개의 "content"테이블과 "users"테이블의 결과를 쿼리하고 싶습니다.MYSQL : 3 개의 테이블에서 결과 쿼리하기

두 개의 기본 콘텐츠 파일은 동일한 필드 이름을 사용하지만 필드는 등록 된 회원이 작성한 댓글과 게스트가 작성한 댓글로 구분됩니다.

"widgetID"가 댓글을 통해 반복하려는 위젯의 기본 ID로 간주하십시오. 마찬가지로 "활성"은 볼 수 있도록 승인되었는지에 대한 0 또는 1입니다.

table_widget : ID 날짜 usersID 메시지 활성

table_member_comments : ID 날짜 은 widgetid usersID 메시지 활성

table_guest_comments : ID 날짜 은 widgetid usersName UsersEmail 메시지 활성

table_users :

ID 날짜 usersID fullName의 활성

그래서 내가 무엇을 알아 내려고 한 것은 결국 함께 두 테이블을 조회하는 방법입니다 멤버와 퍼블릭 코멘트를 반복하여 표시하는 하나의 결과가 있습니다.

나는 JOIN을 할 필요가 있다고 확신하며 올바른 절차를 통해 머리를 감싸지 못했습니다.

나는 여기에서 JOIN을 사용하여 초기 SELECT를 수행해야합니다 ... 내가 어디로 가고 있는지 ... 어디에서 widgetID =? AND u.active = '1'ORDER BY 날짜 시간 DESC LIMIT 0, 100

여기 나를 조정하는 중간 부분. 누군가가 나를 어떻게하는지 보여주기를 원할 것입니다. 감사.

+0

'가입 예를 들어

'... –

+1

그래, 내가 엉망진창이 된 곳이 분명했다. 감사. 나는 스티브가 처음 대답 한 것을 받아 들일 것이다. 나는 둘 다 답변을 upvote하고 그들은 모두 정확합니다. 고마워. – Abela

답변

1

여기에 참여하는 것이 가장 좋은 옵션이 아닌데, 결합하지 않은 데이터를 결합하는 UNION을 사용해야합니다.

SELECT mydata.message FROM 
(
SELECT datetime, message FROM table_member_comments WHERE widgetID = 100 AND active = 1 
UNTION ALL 
SELECT datetime, message FROM table_guest_comments WHERE widgetID = 100 active = 1 
) mydata 
ORDER BY mydata.datetime ASC 
1

사용 UNION 같은 결과 집합 위에 다른 쿼리의 결과에 압정하기 : 내가 당신이 원하는 것은하는`UNION`없는 생각

SELECT a.* 
FROM  (
     SELECT c.message, c.datetime, u.fullName 
     FROM table_member_comments c 
     JOIN table_users u ON c.usersID = u.usersID 
     WHERE c.widgetID = ? AND c.active = 1 

     UNION ALL 

     SELECT message, datetime, usersName 
     FROM table_guest_comments 
     WHERE widgetID = ? AND active = 1 
     ) a 
ORDER BY a.datetime DESC 
LIMIT 0,100 
관련 문제