如何在分组连接查询中未返回任何结果时显示零

时间:2013-07-31 15:01:43

标签: mysql

我正在努力压缩数量 查询我的(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仍然返回一个值,理想情况下,当没有与之关联的图像时,我希望返回零 评论和1与有关联的图像时

我错过了什么?

感谢您提供任何提示

2 个答案:

答案 0 :(得分: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

另外,我认为声明表别名是个好主意。

答案 1 :(得分:0)

我不知道我是否完全理解您的问题,但如果您想查看您的请求是否返回任何结果,您可以使用mysql_num_rows

例如:

$result = mysql_query("SELECT * FROM table1");
$num_rows = mysql_num_rows($result);
如果没有返回结果,则

$num_rows = 0