我正在制作一个电影数据库,我认为为将来制定某种类型的家长控制可能是个好主意。我写了一些SQL代码,它大部分都有效,但我不知道为什么。
在我的主电影表中,我的电影评级为标准等级g,pg,pg-13,r和NC-17。
这是我使用的SQL代码
Select title
From movies
Where rating < "r";
我工作虽然它仍然显示NC-17节目。如果我将r等级更改为NC-17,则仅显示g等级显示。
我知道我可以输入更长的SQL来为我提供我想要的匹配,但我想了解为什么这段代码的执行方式。
感谢您的帮助。
答案 0 :(得分:4)
MySQL如何知道R
小于NC-17
? MySQL知道如何排序数字和字母,但不知道电影评级。您必须分配评级编号并根据该编号进行排序。
例如:
Rating Value
------------------
G 1
PG 10
PG-13 20
R 30
NC-17 40
为每部电影提供评级的数值(或使用连接),然后对 进行排序。
答案 1 :(得分:0)
SQL并不了解电影评级系统。 <
运算符按字母顺序查看字符串。因此,当您说< 'R'
时,它会查找以字母表中R
之前的字母开头的所有评分。由于评分选项数量有限,因此您最好按照以下方式做一些事情:
SELECT title
FROM movies
WHERE rating NOT LIKE 'R'
AND rating NOT LIKE 'NC-17'
答案 2 :(得分:0)
如果您想对它们进行排名,这个查询可能对您有用:
SELECT m.title, m.rating
FROM
(
SELECT s.title, s.rating,
CASE WHEN s.rating = 'G' THEN 1
WHEN s.rating = 'PG' THEN 2
WHEN s.rating = 'PG-13' THEN 3
WHEN s.rating = 'R' THEN 4
WHEN s.rating = 'NC-17' THEN 5
ELSE 6 END AS MovieRanking
FROM movies s
) m
WHERE m.MovieRanking < 4