表格类型
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的任何电影。此外,不应重复类型名称:
动作
约会
答案 0 :(得分: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
通常情况下,我会说在app层中执行此操作,但将SQL放在一起可能会很有趣。