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 仍然返回一个值,理想情况下,我希望在没有与评论关联的图像时返回零,在有图像与之关联时返回 1

我错过了什么?

感谢您的任何提示

4

2 回答 2

0

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

例如 :

$result = mysql_query("SELECT * FROM table1");
$num_rows = mysql_num_rows($result);

$num_rows = 0如果没有返回结果。

于 2013-07-31T15:08:54.350 回答
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 回答