我有一個MySQL查詢:如何顯示包含特定數據的字段的mysql查詢結果?
$query = "SELECT * FROM movielist WHERE genre = 'comedy' ORDER BY dateadded DESC";
我需要,使其從movielist地方流派包含「喜劇」選擇去改變它。
(注:我的體裁領域往往會包含多個流派如 「喜劇,動作,戲劇」
我有一個MySQL查詢:如何顯示包含特定數據的字段的mysql查詢結果?
$query = "SELECT * FROM movielist WHERE genre = 'comedy' ORDER BY dateadded DESC";
我需要,使其從movielist地方流派包含「喜劇」選擇去改變它。
(注:我的體裁領域往往會包含多個流派如 「喜劇,動作,戲劇」
您需要LIKE
流派:
$query = "SELECT * FROM movielist WHERE genre LIKE '%comedy%' ORDER BY dateadded DESC"
$query = "SELECT * FROM movielist WHERE genre LIKE '%comedy%' ORDER BY dateadded DESC";
OR
$query = "SELECT * FROM movielist WHERE FIND_IN_SET('comedy', genre) ORDER BY dateadded DESC";
第二個在大多數情況下更好
更好的是,您應該使用單獨的表來促進多對多的關係。
即,具有兩個字段(movie_id和genre_id(均爲索引外鍵))的新表稱爲'movies_genres'。每次將新的流派添加到電影或將新電影添加到流派時,請向此表添加條目。
要找到屬於特定類型的所有電影:
SELECT movies.*
FROM movies
JOIN movies_genres
ON movies_genres.movie_id = movies.id
JOIN genres
ON movies_genres.genre_id = genres.id
WHERE genres.name = 'comedy'
要找到屬於特定電影所有類型:
SELECT genres.*
FROM genres
JOIN movies_genres
ON movies_genres.genre_id = genres.id
JOIN topics
ON movies_genres.movie_id = movies.id
WHERE movies.name = 'Citizen Kane'
對於立即解決,做一個德克斯特建議。但是,從長遠來看,你會得到很多的好處從normalizing your database
有了您的模式,你可能會感興趣的find_in_set()
SELECT
x,y,z
FROM
movielist
WHERE
find_in_list('comedy', genre)
請記住,這不是index-friendly和潛在的慢。
隨着normalized tables你不會有genre='comedy, action, drama'
(一個領域內,即結構化的數據),但表
genres (
id int auto_increment,
genre_name varchar(...)
...
)
表
movielist (
id int auto_increment,
title varchar(...)
...
)
和一張桌子
moviegenres (
movieid int,
genreid int,
...
)
以及使用一個或兩個JOINs將存儲在這三個表中的信息「粘合」在一起的查詢。