2009-12-14 14 views
2

나는 영화 테이블과 표를 가지고있다. 사용자는 좋아하는 영화에 투표합니다. 영화의 총 투표 수에 따라 내림차순으로 영화 목록을 표시해야합니다. 나는 지금 일종의 일을하고있다. 유일한 문제는 0 표를 가진 영화를 보여주지 않는다는 것입니다.mysql 초보자 - 합류

SELECT m.name, m.imdb_url, m.comment, COUNT(v.movie_id) AS votes 
FROM movies m, votes v 
WHERE v.movie_id=m.movie_id 
GROUP BY v.movie_id 
ORDER BY votes DESC 

답변

5

외부 결합을 수행해야합니다. 당신이 코딩 한 것은 암묵적인 내부 조인입니다.

LEFT OUTER JOIN은 "왼쪽"테이블의 모든 행과 오른쪽 테이블의 일치하는 레코드를 가져옵니다. 오른쪽 테이블에서 일치하는 레코드가 누락 된 모든 왼쪽 테이블 레코드는 올바른 테이블 값에 대해 null을 갖습니다. null을 여러 가지 방법으로 0으로 설정할 수 있습니다.

0

투표가없는 영화의 경우 테이블의 가치가 0입니까, 아니면 NULL/EMPTY를 사용합니까?

이 제로를 기록하는 경우,이처럼 SQL 뭔가합니다

"영화를 선택 WHERE 표> = 0"

0
당신은 아마 왼쪽 테이블의 레코드를 포함하는 left join을 할 필요가

(표)에 일치하는 항목이 없더라도 영화 (영화)를 볼 수 있습니다. peacedog의 조언으로 당

0

는 :

SELECT m.name, m.imdb_url, m.comment, COUNT(v.movie_id) AS votes 

FROM movies m 
left outer join votes v 
on v.movie_id=m.movie_id 

GROUP BY v.movie_id 
ORDER BY COUNT(v.movie_id) DESC 

나는 MySQL의에 대해 잘 모르겠지만, 모든 데이터베이스는 당신이 ORDER BY 비트의 별칭을 사용하는 것을 허용하지, 그래서 나는 COUNT(v.movie_id)votes를 교체했습니다.

+0

이 옵션을 사용하면 0 표가있는 동영상 1 개만 반환됩니다. 나는 이것이 그룹화와 관련이 있다고 가정한다. – Fatalis

1

내가 당신이 찾고 있다고 생각하는 것은 left join입니다. 귀하의 SQL 모양은 다음과 같습니다.

SELECT m.name, m.imdb_url, m.comment, COUNT(v.movie_id) AS votes 
FROM movies AS m 
LEFT JOIN votes AS v ON m.movie_id = v.movie_id 
GROUP BY v.movie_id 
ORDER BY votes DESC