2013-07-29 3 views
0

우선 newbee 질문에 사과드립니다. MySQL에 완전히 익숙합니다. 일부 필드가있는 3 개의 테이블이 있습니다. 내가 explicited 사진의 데이터와 그 사진을 소유하는 사용자와의 모든 투표의 목록 (투표 당 1 기록)가 필요합니다MySQL 3 테이블에서 데이터 추출하기

table 1 - Registration 
user_name 
user_email 
ID 

table 2 - photogallery 
ID 
user_id 
Status 
photo_url 

table 3 - photovote 
Photo_ID 
status 

다음과 같이 질의에 대한 관련 필드입니다. 즉 photovote의 Photo_ID는 photogallery의 ID와 photogallery의 user_id는 등록의 ID입니다. 내가 생각 해낸 무엇

SELECT * 
FROM photovote 
LEFT JOIN (photogallery, registration) 
ON photovote.Status = 1 
AND photogallery.Status = 1 
WHERE photovote.user_id = photogallery.user_id 
AND photogallery.user_id = registration.ID 

입니다하지만 정말 일을 할 does'nt. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까? 고마워요. 안드레아

답변

2
SELECT * 
FROM photovote v 
INNER JOIN photogallery g ON v.PhotoId = g.ID 
INNER JOIN registration r ON g.user_id = r.ID 
WHERE v.Status = 1 
AND g.Status = 1 
+1

갤러리의 'user_id'는 생성자/소유자의 ID이며 다른 사람은 유권자. 그래서 첫 번째 조인은'photovote.PhotoId = photogallery.ID'이어야한다고 생각합니다. 존재하지 않는 갤러리에 대한 투표가 있어서는 안되기 때문에 당신도 거기에 '내부 참여'할 수 있습니다. 두 번째 조인은 갤러리에 항상 등록 된 사용자가 연결된 경우 '내부 조인'일 수도 있습니다. 내부 조인은 왼쪽 조인보다 다소 빠르며이 경우에도 동일한 결과를 제공 할지라도 의미가 다릅니다. 그래도 유용한 답변입니다. – GolezTrol

+0

@ juergen-d의 쿼리는 완벽한 감사를드립니다. 사실 내 실수는 논리 측면에서 구문의 측면에서 분명하다. 재미있게 그는 내 쿼리의 논리 실패를 이해하고 조건을 올바르게 대체했습니다. photovote.user_id = photogallery.user_id는 잘못되었습니다. 첫 번째는 GolezTrol이 올바르게 명시된 것처럼 사진의 소유자가 아닌 유권자의 ID입니다. 고마워요! –

0

SELECT r.user_name, r.user_email, p.status, p.photo_url, 등록 된 R LEFT FROM pv_status 같은 pv.status는 사진 갤러리 (P)의 ON 가입 (r.id = p.id) LEFT 조인 photovote pv ON (pv.id = p.id) WHERE p.status = 1 AND pv_status = 1

관련 문제