MySQL новичок - присоединение - PullRequest
2 голосов
/ 14 декабря 2009

У меня есть таблица фильмов и таблица голосов. Пользователи голосуют за фильмы, которые им нравятся. Мне нужно отобразить список фильмов по убыванию общего количества голосов за фильм. Что у меня сейчас вроде работает. Единственная проблема - он не показывает фильмы с 0 голосами.

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 ]

5 голосов
/ 14 декабря 2009

Вам нужно сделать внешнее соединение; то, что вы кодировали, является неявным внутренним соединением.

LEFT OUTER JOIN будет захватывать все строки из «левой» таблицы и любые соответствующие записи из правой таблицы. Любые записи в левой таблице, в которых отсутствуют соответствующие записи в правой таблице, будут иметь нулевые значения для правильных значений таблицы. Вы можете превратить эти нули в 0 несколькими способами.

1 голос
/ 14 декабря 2009

Я считаю, что вы ищете левое соединение . Ваш 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
0 голосов
/ 14 декабря 2009

Согласно совету Peacedog:

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, поэтому я заменил votes на COUNT(v.movie_id).

0 голосов
/ 14 декабря 2009

Возможно, вам нужно выполнить левое соединение , которое включает записи в левой таблице (фильмы), даже если в правой таблице нет совпадений (голосов).

0 голосов
/ 14 декабря 2009

Имеет ли ваша таблица значение 0 для фильмов без голосования или использует NULL / EMPTY?

Если он записывает ноль, то сделайте ваш SQL что-то вроде этого:

"ВЫБРАТЬ фильмы, ГДЕ голосует> = 0"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...