MySQL Один ко многим, вытягивая только выбранную запись из множества таблиц - PullRequest
2 голосов
/ 14 июля 2011

Я довольно новичок в выражениях SQL, и я никогда не был очень хорош в соединениях и т. Д. У меня возникла проблема при разработке, как сделать следующее:

У меня есть 2 таблицы, одна называется MUSIC, однаназывается ОБЗОРЫ.Ссылка на две таблицы в поле, называемом uid - записи в MUSIC уникальны, но для каждой записи MUSIC может быть много обзоров.

REVIEWS имеет поле thumbsup, которое устанавливается в значение 1, если пользователь даетМУЗЫКА палец вверх.В противном случае поле равно нулю.В REVIEWS может быть много thumbsup, один thumbsup или нет.

Я пытаюсь отобразить список записей в MUSIC, и если существует соответствующая запись REVIEW, которая содержит значение thumbsup 1 - простоодна запись в REVIEWS сделает это - затем отобразить значок на странице списка.

Я хорошо осмотрел различные подобные вопросы, но ничего подобного не возникало.Я пытался лечить подобные соединения, но, честно говоря, то, как все это работает, мне не под силу.Извините за то, что я идиот.

В качестве доказательства того, что у меня, по крайней мере, был шанс, пока я придумал это, основываясь на другом посте:

SELECT m.*, r.thumbsup 
FROM (SELECT MAX(thumbsup) uid FROM reviews GROUP By uid) maxThumbs 
INNER JOIN reviews r ON maxThumbs.uid = reviews.uid 
INNER JOIN music m ON music.uid = reviews.uid  

Само собой разумеетсяэто не работает: (

Если бы кто-нибудь мог помочь мне с правильной структурой запроса, я был бы чрезвычайно благодарен.

Большое спасибо

Тед.

Ответы [ 4 ]

1 голос
/ 14 июля 2011
select DISTINCT m.* from music m INNER JOIN reviews r on m.uid = r.uid where r.thumbsup > 0 
0 голосов
/ 14 июля 2011
SELECT DISTINCT m.*, r.thumbsup
FROM music m LEFT JOIN reviews r 
ON (m.uid = r.uid AND r.thumbsup=1);

Возвращает музыкальные записи без обзоров, без положительных отзывов, смешанные обзоры, только положительные отзывы (с указанием любых положительных отзывов)

0 голосов
/ 14 июля 2011
SELECT m.* 
FROM music m
INNER JOIN 
  (SELECT DISTINCT reviews.uid WHERE review.thumbsup > 0) r ON (r.uid = m.uid)
0 голосов
/ 14 июля 2011

Как насчет этого:

SELECT m.*, IFNULL((SELECT 1 FROM reviews r WHERE r.thumbsup > 0 AND m.uid = r.uid LIMIT 1),0) has_review 
FROM music m
...