我知道标题并不是非常有用,部分原因是我无法自己解决这个问题,因此我无法弄清楚如何说出来,所以我可以&# 39;不要谷歌。
无论如何,我正在制作一个Netflix风格的网站,其电影和电视节目从我的DVD收藏中扯下来。它是一个运行我的Raspberry Pi的LAMP堆栈。我希望通过从一堆复选框中选择流派来选择按流派搜索。我想让它工作,如果我检查"恐怖"和"喜剧",搜索结果只返回同时具有这些类型的电影/电视节目,而不是/或。
所以我有几个MySQL表,THR_MOVIE,THR_SHOW和THR_GENRE。 THR_MOVIE和THR_SHOW的结构对于这个问题并不重要,只要知道每个电影/电视节目只占用一行并且具有唯一的ID。这是THR_GENRE的结构:
CREATE TABLE `THR_GENRE` (
`media_id` INT(7) UNSIGNED NOT NULL,
`genre` VARCHAR(255) NOT NULL,
`media_type` ENUM('movie','show') NOT NULL,
`date_added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`media_id`, `genre`, `media_type`))
显然,如果media_type是电影',则media_id是THR_MOVIE ID而不是THR_SHOW ID。类型表中的一些示例数据可能如下所示:
row 1: media_id=12, genre='horror', media_type='movie'
row 2: media_id=12, genre='comedy', media_type='movie'
那么这个查询将如何运作?我需要获取电影数据,所以我需要加入THR_MOVIE和THR_GENRE来拍电影,然后用THR_SHOW和THR_GENRE做同样的电视节目。
答案 0 :(得分:0)
您可以使用left outer join
:
select
*
from
THE_GENRE g
left outer join
THR_MOVIE m
on m.id = g.media_id
and g.media_type = 'movie'
left outer join
THR_SHOW s
on s.id = g.media_id
and g.media_type = 'show'
查询将返回电影和显示表的列。使用此查询结果的代码需要检查media_type值并使用movie
表格列,如果类型为' movie'如果类型为show
,则为show
表格列。
答案 1 :(得分:0)
感谢您的回复,但我自己也明白了。
select *
from THR_GENRE
where (genre='horror'
or genre='comedy')
and media_type='movie'
group by media_id
having count(*)=2
显然我的PHP脚本必须使用count(*)= X创建查询字符串,其中X是一个包含搜索的类型数量的变量。