2017-09-16 170 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是一些變量保存類型的數量搜索。

相關問題