我有一个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将存储在这三个表中的信息“粘合”在一起的查询。