簡體   English   中英

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

[英]MySQL - get rows with same ID but different specific values on another column

我知道標題不是非常有用,部分原因是我自己無法弄清楚該怎么寫,因此我無法在Google上搜索。

無論如何,我正在制作一個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'

查詢將返回電影表和節目表的列。 從而消耗此查詢結果代碼將需要檢查的媒體類型值,並用movie表列,如果類型是“電影”或show表列,如果類型show

感謝您的回復,但我自己才知道。

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是保存所搜索類型數量的某個變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM