依靠连接表会导致返回1行

时间:2012-08-30 12:07:28

标签: mysql join count left-join

我有查询:

SELECT 
    b.title,
    b.url,
    b.`date`,
    b.gallery,
    count(c.id) as comments_count,
    a.name,
    b.content,
    b.comments,
    LEFT(b.content, LOCATE('<page>', b.content)-1) as content_short 
FROM blog b 
LEFT JOIN blog_comments c ON 
    (b.id = c.note AND c.approved = 1) 
LEFT JOIN administrators a ON 
    (b.aid = a.id) 
WHERE 
    b.`date` < now() AND 
    b.active = 1 
ORDER BY b.`date` DESC;

现在,当我删除count(c.id) as comments_count,时,我已经返回了2行。当它出现时,只返回了一行。

有没有办法解决ot或我只需要改变 count(c.id) as comments_count,(select count(id) as comments_count from blog_comments where note = b.id) as comments_count,

1 个答案:

答案 0 :(得分:3)

Count(*)是一个聚合函数,因此它将应用于一个组中。 这意味着当您依靠组时,它将在每个组上应用该功能。 这些组是在您使用分组依据时形成的,在这种情况下,您没有使用,因此MySQL认为所有选择(您的联接)是仅1组。

因此,将计数应用于唯一组并返回行数。

您应该在想要的字段

中添加Group by

一个例子是here