0

(php) mysql データベースでクエリの数を圧縮しようとしていますが、次の問題があります。

最近投稿された 10 件のコメントについて、コメントの平均評価と、そのコメントに関連付けられた画像があるかどうかを示します。

MySQL は次のとおりです。

SELECT 
obj_images.fk_obj_id AS has_images,
AVG(obj_rating) AS rating
/*other joined tables with obj_comments omitted for clarity ...*/
FROM obj_comments
INNER JOIN obj_images
ON obj_comments.fk_obj_id=obj_images.fk_obj_id
GROUP BY obj_comments.fk_obj_id
ORDER BY comment_id DESC
LIMIT 10

コメントに関連付けられた画像がない場合でも、has_images は値を返します。理想的には、コメントに関連付けられた画像がない場合は 0 を返し、コメントに関連付けられた画像がある場合は 1 を返します。

私は何が欠けていますか?

ヒントをありがとう

4

2 に答える 2

0

IFNULL()内部結合の代わりに外部結合を使用します。

SELECT 
  AVG(c.obj_rating) AS avg_rating
  IFNULL(i.fk_obj_id, 0) AS has_images,
  /* ... */
FROM 
  obj_comments c
  LEFT JOIN obj_images i ON c.fk_obj_id = i.fk_obj_id
GROUP BY 
  c.fk_obj_id
ORDER BY 
  c.comment_id DESC
LIMIT 10

また、テーブルのエイリアスを宣言するのも良い考えだと思います。

于 2013-07-31T15:06:49.047 に答える