2013-05-11 1 views
0

발행합니다.가입 표는 내가 가입을 찾고 있어요 3 개 테이블이

pictures 
-------- 
id user_id link 

users 
----- 
id name 

votes 
----- 
id user_id picture_id 

내가 로그인 한 특정 사용자에 대한 모든 사진에 대한 총 투표 수를 찾을 수있다 싶지 원을 꽤 많이 나는 모든 사진을 반복하고 사용자가 사진에 투표를하면 다시 투표 할 수 없습니다. 나는 모든 사진하지만 모든 투표가 첫 번째 레코드에 최대 추가되고 있습니다 얻을

SELECT 
p.*, u.username, d.total_votes 
FROM pictures p 
LEFT JOIN users u 
ON p.user_id = u.id 
LEFT JOIN 
(
select id, picture_id, count(id) as has_voted from votes 
) d on d.picture_id = p.id 

:

Desired output: 
--------------- 

id user_id link user_name total_votes 
1  5   [link] Sean   5 

은 지금까지 나는 이런 식으로 뭔가가있다.

편집

enter image description here

너무 불분명 것에 대한

죄송합니다 그래서이 내 데이터베이스의 모든 이미지입니다. Sean (user_id 1)으로 로그인했다고 가정 해 보겠습니다. 각 이미지에 투표 한 횟수를 표시하고 싶습니다.

user_id는 누가 이미지를 업로드 했습니까?

+0

당신이 원하는 출력에 따라 smple 기록을 줄 수 있습니까? –

+0

이 사람이 투표 한 사진을 모두 선택 하시겠습니까? –

+0

업데이트 됨. 일을 명확히하는 데 도움이되는 이미지가 추가되었습니다. – SeanWM

답변

1

(업데이트) 시도 :

Select p.id, p.user_id, p.link, u.name, count(v.id) As total_votes 
from pictures p 
join users u on p.user_id = u.id 
left join votes v on p.id = v.picture_id and v.user_id = ? 
group by p.id 
+0

아주 가깝지만 올바른 사용자 이름이 표시되지 않습니다 .. just mine (sean) – SeanWM

+0

@SeanWM : 지금 시도하십시오. –

0

는 시도이

Select p.id, p.user_id, p.link, u.name,(CASE count(v.id) WHEN NULL THEN 0 ELSE count(v.id) END) as total_votes 
    from pictures p  
    join users u on p.user_id = u.id 
    join votes v on (v.user_id = u.id and v.picture_id = p.id) 
where v.id is not null 
    group by p.id 
+0

닫기하지만 업로드 한 MY 이미지 만 표시됩니다. 모든 이미지가 필요해. – SeanWM

+0

다음 내적 조인을 사용하여 내 솔루션을 내적 참여로 업데이트했습니다 –

+0

흠, 여전히 원하는 결과가 아닙니다. 내가 제공 한 이미지를 보았는가? – SeanWM