2017-07-04 6 views
0

クエリが2つのテーブルの関係の場合は

$query = "SELECT a.title, a.content, SUM(b.rating) as rating FROM posts a, ratings b WHERE a.id = :id AND a.id = b.pid GROUP BY b.author ORDER BY rating"; 

    posts          ratings 
    [ id - title - content - author ]   [ pid - rating - author ] 
    --------------------------------------    --------------------------- 
    [ 1 - title1 - content1 - author1 ]   [ 1 - 8 - author1 ] 
    [ 2 - title1 - content2 - author2 ]   [ 1 - 5 - author1 ] 
    [ 3 - title1 - content4 - author3 ]   [ 1 - 9 - author2 ] 
    [ 4 - title4 - content4 - author4 ]   [ 1 - 6 - author4 ] 
    [ 5 - title5 - content5 - author5 ]   [ 5 - 3 - author5 ] 

は、今私はすべてのSUMによってORDERポストにしようとしているこれらのテーブルに依存しているの存在が存在するかどうか評価WHEREa.id = b.pid AND a.author = b.authorしかし、それはそうであるように命令されていません。そして、評価が全くない場合、文節WHERE a.id = p.idが空であるため、クエリの値全体が空になります。そして、SUM = 0 、Ho wこれを正確に修正できますか?

id1ときecho

author1, author2, author4 

ではなく、それはただの無作為化ORDERで示し、評価テーブルが空の場合、何の値が全てで呼び出されていない場合には、このようなショーの値になっています。

+0

私たちの質問を編集し、あなたが望む結果を表示します。 –

答えて

0

は、FROM句のカンマを使用します。 常には、適切で明示的なJOIN構文を使用します。

あなたが望むものを理解するのは少し難しいです。しかし、作者があなたのクエリで最小限の役割を果たすにもかかわらず、あなたは作者に大きな焦点を当てているようです。これはあなたが記述しているものです:

SELECT p.author, SUM(r.rating) as sumrating 
FROM posts p LEFT JOIN 
    ratings r 
    ON p.id = r.pid AND p.author = r.author 
WHERE a.id = :id 
GROUP BY p.author 
ORDER BY sumrating; 

私にとっては特に役に立たないようです。

関連する問題