2016-05-12 6 views
0

私は、mysqlを使ってphpを使ってアルファベットA-Zのページ設定を作成しています。私はアルファベットAのために私のテーブルに単一のレコードを持っています。私はレコードを照会するとき、それは単一の行の代わりに複数の行を返します。また、リンクされたテーブルには、AのムービーIDのレコードの単一の行のみが含まれます。どのテーブルにも1対多の関係はありません。もし私がそれを間違えてしまった場合は、以下のクエリで親切に修正してください。前もって感謝します。クエリは複数の行を返しますか?

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

explict 'JOIN' sintaxis、Aarバートランドでは素敵な記事を書いています。[古い習慣を使って蹴る悪い習慣](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old -style-joins.aspx)について説明します。 –

答えて

0

また、あなたは、私はあなたが2つのレコードを取得していると言うので、タイプミスであると仮定し、あなたのOR句でlikeが欠落しているような

ORDER BY M.name ASC LIMIT 1; 

ことによってあなたの順序を変更してください。あなたはあなたのコードで

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

oops。私はスタックオーバーフローでクエリを貼り付けるときに間違いを犯しました。アルファベットAに複数のレコードがあるとしたら、制限を1に設定すると、アルファベットAから始まるすべてのレコードをどのように返しますか? – Janaki

+0

@Janaki: - 'A'で始まるすべてのレコードを取得したい場合は、' LIMIT 1; '部分を削除するだけです。 –

+0

@Janaki: - サイドノートでは、カンマ区切りのJOINSを避けてください。彼らはもうお勧めしません。代わりに明示的なJOINSを使用してみてください。 –

0

OR部分

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; 
0

を制限する必要がある場合はLIKEキーワードを含める必要があり、また、私はあなたのために括弧を置くべきだと思い

関連する問題