2014-08-28 186 views
0

我正在研究一個電影數據庫,我認爲在未來有一些類型的家長控制可能是一個好主意。我寫了一些SQL代碼,它大部分工作,但我不知道爲什麼。SQL代碼需要幫助理解

在我的主要電影表中,我擁有標準等級爲g,pg,pg-13,r和NC-17的電影。

下面是SQL代碼,我用

Select title 
From movies 
Where rating < "r"; 

我的作品,雖然它仍然顯示了NC-17所示。如果我將r等級更改爲NC-17,它只會顯示g等級的演出。

我知道我可以輸入一個更長的SQL來給我我想要的匹配,但我想了解爲什麼這段代碼正在執行它的方式。

感謝您的幫助。

+1

」但我想明白爲什麼這段代碼是按照它的方式執行的。「查看每個字符串中第一個字符的ascii數值。它可以幫助你理解。 http://www.asciitable.com/ NC-17 。對某個關於內部運作的合理問題+1。 – xQbert 2014-08-28 20:11:50

+0

大家感謝您的解釋和其他解決方案。 – user2537388 2014-08-29 01:09:24

回答

0

SQL不理解影片評分系統。 <運算符按字母順序查看字符串。所以當你說< 'R'時,它正在尋找所有以字母表中R之前的字母開頭的評分。由於有對收視率的選擇數量有限,你最好做沿着此線的東西:

SELECT title 
FROM movies 
WHERE rating NOT LIKE 'R' 
AND rating NOT LIKE 'NC-17' 
4

MySQL如何知道R小於NC-17? MySQL知道如何對數字和字母進行排序,而不是電影評級。您必須分配收視率號碼並基於此進行排序。

例如:

Rating Value 
------------------ 
    G   1 
    PG  10 
    PG-13  20 
    R   30 
    NC-17  40 

不是給每部電影的等級的數值(或使用加入),然後排序上

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