0

私は次のようなクエリを持っています:

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行が返されます。存在する場合、返される行は1つだけです。

otを修正する方法はありますか、それとも単にcomments_countに変更 count(c.id) as comments_count,する必要がありますか?(select count(id) asfrom blog_comments where note = b.id) as comments_count,

4

1 に答える 1

3

Count(*)は集約関数であるため、グループで適用されます。つまり、グループを当てにすると、すべてのグループに関数が適用されます。Group By を使用するとグループが形成されます。この場合は使用していないためMySQL、すべての選択 (結合) は1 つのグループのみであると考えてください。

そのため、一意のグループにカウントを適用し、行数を返します。

必要なGroup byフィールドごとに a を追加する必要があります

例はこちら

于 2012-08-30T12:10:30.907 に答える