2017-09-16 167 views
0

我知道标题不是很有帮助,因为我无法自行解决这个问题,部分原因是我无法弄清楚把它说出来,所以我不能谷歌它。MySQL - 获取具有相同ID但具有不同特定值的行的另一列

无论如何,我正在制作一个Netflix风格的网站,电影和电视节目从我的DVD收藏中撕掉。这是一个运行我的树莓派的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_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

更新您的问题添加预期结果,,以及您实际正在使用的查询。 – scaisEdge

回答

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表列。

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是一些变量保存类型的数量搜索。

相关问题