结合2个查询的PHP MySQL
表格体裁结合2个查询的PHP MySQL,php,mysql,sql,Php,Mysql,Sql,表格体裁 id | genre | display ---+-----------+------------ 1 | Action | 1 2 | Comedy | 0 3 | Romance | 1 桌上电影 id | genre_id | movie | year | display ---+-----------+---------------+---------+------------ 1 | 1 | Kill
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
质疑
我正在尝试编写一个sql语句,以便按照以下特定顺序得到结果。如果某个类型的显示为1,则将显示该类型本身以及显示为1的任何电影。此外,流派名称不应重复:
- 杀死比尔
- 2003年
- 泰坦尼克号
- 一九九七年
- 卡萨布兰卡
- 1942年
您的查询选择了正确的行。我认为唯一的问题是订购:
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可能会很有趣。如果
类型。显示检查将移动到JOIN子句中怎么办?@raina77ow它应该不会有什么不同。@raina77ow。它对内部连接没有影响。根据输出,二阶应该是什么并不明显be@Orangepill订单应显示类型名称一次,并浏览所有电影及其相关年份。还有一个条件。仅输出显示为1的类型及其后续电影。
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