MySQL - 获取具有相同ID但在另一列上具有不同特定值的行

时间:2017-09-16 16:26:20

标签: mysql

我知道标题并不是非常有用,部分原因是我无法自己解决这个问题,因此我无法弄清楚如何说出来,所以我可以&# 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做同样的电视节目。

2 个答案:

答案 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是一个包含搜索的类型数量的变量。