問題は、0のコメントまたは1のコメントに1が表示され、残りがうまくいけば、2、3などがうまく動作するということです。左の結合と同じクエリのカウントで不正な結果が返される
$sql = "SELECT blog.*,count(blog.id) as Total FROM blog left JOIN comment on comment.id = blog.id GROUP BY date desc";
問題は、0のコメントまたは1のコメントに1が表示され、残りがうまくいけば、2、3などがうまく動作するということです。左の結合と同じクエリのカウントで不正な結果が返される
$sql = "SELECT blog.*,count(blog.id) as Total FROM blog left JOIN comment on comment.id = blog.id GROUP BY date desc";
あなたのクエリは次のようになります。
SELECT b.date, count(c.id) as Total
FROM blog b LEFT JOIN
comment c
ON c.id = b.id
GROUP BY b.date DESC;
これは、(あなたの現在のクエリが動作している場合場合であるべきである)date
はblog
から来ていることを前提としています。違いは、の2番目のテーブルではなく、の最初のではないことです。
これは、blog
の列には*
を使用しません。これは通常、GROUP BY
を使用するときわめて悪い考えです。ほぼすべてのSQLエンジンによって実施されるベストプラクティスは、にあるときに、SELECT
に集約されていない列のみを含めることです。
注:非常に異なる2つのエンティティ(ブログやコメント)の間に同じ列id
が使用されていることは非常に厄介なようです。JOIN
私はcount(blog.id)からcount(comment.id)に変更します