0

次のようなクエリがあります。

SELECT c.review, u.username, c.date, c.good, c.rate_id, r.rating
FROM comments AS c
LEFT JOIN users AS u
    ON c.user_id = u.user_id
LEFT JOIN items as i
    ON i.items_id = c.item_id
LEFT JOIN master_cat AS m
    ON m.cat_id = i.cat_id
LEFT JOIN ratings as r
    ON r.item_id = c.item_id 
WHERE i.item = '{$item}' AND c.user_id = r.user_id
ORDER by {$sort};  

しかし、これは限界です。その WHERE ステートメント ( c.user_id = r.user_id) が一致する場合、JSON は を出力するためc.ratingです。そうでない場合は、アプリケーションで印刷され、必要なデータがスキップされます。

たとえば、コメントを同じユーザーからの評価に一致させると、データがペアになります。ただし、一部のコメントにはまだ評価 (1 ~ 5 で評価できます) が関連付けられていません。したがって、柔軟性のない WHERE 句でデータをスキップする代わりに、条件付きにして、後でIF 0, print out "not rated". (これは SQL ではなく Java で行われます。SQL では、MySQLDB に 0 を格納するだけで済みます。)

を削除して?WHEREの一部にする必要があると思います。SELECT

4

1 に答える 1

1
LEFT JOIN ratings as r
    ON r.item_id = c.item_id AND c.user_id = r.user_id
WHERE i.item = '{$item}'

その条件をwhere句に入れると、 が に変換left joinされます。inner join

于 2012-09-28T18:48:59.750 に答える