2016-05-12 156 views
0

我使用php和mysql創建字母表A-Z的分頁。我在表格中爲單字母A記錄單個記錄。當我查詢記錄時,它將返回多行而不是單行。另外,鏈接表僅包含A的電影ID的單行記錄。任何表格中都沒有一對多的關係。如果我在那裏做了任何錯誤,請通過下面的查詢來糾正。提前致謝。查詢返回多行?

select 
    M.name, 
    M.id, (select year(M.released_date))as year, 
    MS.storyrating, 
    S.screenplayrating, 
    MS.dialoguerating, 
    MS.directionrating, 
    MS.musicrating, 
    MS.bgmrating, 
    MS.cinematographyrating, 
    MS.characterizationrating, 
    MS.shotlocationrating, 
    MS.editingrating, 
    MS.productionrating, 
    MI.director, 
    MI.musicdirector 
from tttbl_movie M, tttbl_movie_info MI, tttbl_movie_score MS 
where M.id=MI.movie_id 
    and M.id=MS.movie_id 
    AND M.name 'A%' OR M.name 'a%' 
ORDER BY M.name ASC LIMIT 0,2; 
+0

促進使用顯式'JOIN' sintaxis,Aar在伯特蘭寫了一篇不錯的文章[踢壞的習慣:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old -style-joins.aspx)。 –

回答

0

試圖改變自己的ORDER BY像

ORDER BY M.name ASC LIMIT 1; 

你也缺少likeOR條款,我認爲是筆誤,因爲你說你得到2個記錄。

+0

oops。我在堆棧溢出粘貼查詢時犯了錯誤其實我的查詢有類似關鍵字。假設我在字母表A中有多個記錄,那麼如果我將限制設置爲1,它將如何返回以字母A開始的所有記錄? – Janaki

+0

@Janaki: - 如果你想獲得所有以'A'開始的記錄,那麼你只需要刪除'LIMIT 1;'部分 –

+0

@Janaki: - 在旁註中儘量避免使用逗號分隔連接。他們不被推薦了。而是嘗試使用顯式連接。 –

0

你不喜歡子句中的代碼

select 
M.name, 
M.id, 
year(M.released_date as year, 
MS.storyrating, 
S.screenplayrating, 
MS.dialoguerating, 
MS.directionrating, 
MS.musicrating, 
MS.bgmrating, 
MS.cinematographyrating, 
MS.characterizationrating, 
MS.shotlocationrating, 
MS.editingrating, 
MS.productionrating, 
MI.director, 
MI.musicdirector 
from tttbl_movie M, tttbl_movie_info MI, tttbl_movie_score MS 
    where M.id=MI.movie_id 
and M.id=MS.movie_id 
AND M.name like 'A%' OR M.name like 'a%' ORDER BY M.name ASC LIMIT 0,2; 

,如果你需要它最終限制1

LIMIT 1; 
0

您需要包括LIKE關鍵字,也是我想你應該把括號爲OR part

where M.id=MI.movie_id 
    and M.id=MS.movie_id 
    and (M.name LIKE 'A%' OR M.name LIKE 'a%') 
ORDER BY M.name ASC;