2016-05-12 113 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;