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

标签 mysql

我知道这个标题不是很有帮助,我自己无法弄清楚这个问题的部分原因是我不知道如何表达它,所以我无法用谷歌搜索它。

无论如何,我正在制作一个 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 是“movie”,则 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 执行相同操作以获取电视节目。

最佳答案

您可以使用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表列(如果类型为“电影”或 show)表列(如果类型为 show) .

关于MySQL - 获取另一列上具有相同 ID 但不同特定值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46256020/

相关文章:

mysql - 加入查询也返回空

php - 在注册表单中添加额外的下拉列表

php - mysql:对结果进行分组,限制它们并在一个查询中连接到其他表

mysql - 尝试使用 case 语句为列设置不同的值

php - Magento 静态 CMS block 存储在哪里?

php - MySQL 到 MySQLi 的转换 php 形式

mysql - 单击时将 int 列加一

mysql - Doctrine 忽略数据库的字符集和排序规则

mysql - SQL查询获取协议(protocol)列表

c# - Mysql 大量查询