![](/img/trans.png)
[英]MySQL Select distinct rows with same id with different value in a column and excluded a specific value in another column
[英]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.