2013-05-31 3 views
0

Таблица жанровыеPHP MySQL Объединение 2 запросов

id | genre  | display 
---+-----------+------------ 
1 | Action | 1 
2 | Comedy | 0 
3 | Romance | 1 

Таблица фильмов

id | genre_id | movie   | year | display 
---+-----------+---------------+---------+------------ 
1 | 1   | Kill Bill  | 2003 | 1 
2 | 1   | Die Hard  | 1988 | 0 
3 | 2   | Anchorman  | 2004 | 1 
4 | 3   | Titanic  | 1997 | 1 
5 | 3   | Casablanca | 1942 | 1 

Запрос

SELECT genre.genre, movies.movie, movies.year FROM `genre` JOIN `movies` ON 
genre.id = movies.genre_id WHERE genre.display = 1 AND movies.display = 1 

Я пытаюсь написать SQL заявление, так что я получаю результат ниже в этом конкретном порядке. Если жанр имеет дисплей 1, то сам жанр будет отображаться, а также любые из его фильмов, которые имеют дисплей 1. Кроме того, название жанра не должен дублироваться:

  1. Действия

    • убить Билла
  2. Romance

    • Титаник
    • Casablanca

ответ

2

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

SELECT genre.genre, movies.movie, movies.year 
FROM `genre` JOIN 
    `movies` 
    ON genre.id = movies.genre_id 
WHERE genre.display = 1 AND movies.display = 1 
order by genre.genre, movies.year desc; 

Если вы не хотите, жанр, чтобы дублировать, вы можете использовать обалденный трюк. То есть, union жанры в с NULL фильмов, а затем заказать их правильно и не забудьте удалить имена после этого:

select (case when movie is NULL then genre else NULL end) as genre, 
     movie, year 
from ((select genre, NULL as movie, NULL as year 
     from genre 
     where display = 1 
    ) union all 
     (SELECT genre.genre, movies.movie, movies.year 
     FROM `genre` JOIN 
      `movies` 
      ON genre.id = movies.genre_id 
     WHERE genre.display = 1 AND movies.display = 1 
    ) 
    ) t 
order by genre, 
     movie is null desc, 
     year desc 

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

+0

Что делать, если проверка genre.display будет перемещаться в предложение JOIN? – raina77ow

+0

@ raina77ow Это не должно меняться. – Barmar

+1

@ raina77ow. , , Это не влияет на внутреннее соединение. –

Смежные вопросы