1

ディスカッション掲示板を作成しています...投稿を含むテーブルとコメントを含む別のテーブルがあります...外部IDはpost_idです。今、私はそれぞれが持っているコメントの数に基づいて投稿をソートしようとしています。私が現在使用しているクエリ:

SELECT username, posts.post_id, category_id, UNIX_TIMESTAMP(posts.datetime) AS datetime, posts.body, posts.owner_id, COUNT(comment_id) AS number
FROM posts, comments, user
WHERE posts.post_id = comments.post_id AND posts.owner_id = user.`id`
GROUP BY comments.post_id
ORDER BY number DESC 

クエリは正常に機能しますが、問題はコメントのない投稿が選択されないことです。コメントの有無を気にせずに投稿を表示したいのですが、コメント数で並べ替えたいです。

4

2 に答える 2

3

左結合を使用します。From /whereジョイントはINNERJOINと同等です:

SELECT username, p.post_id, category_id, UNIX_TIMESTAMP(p.datetime) AS datetime,
   p.body, p.owner_id, COUNT(comment_id) AS number
FROM posts p
LEFT JOIN comments c ON p.post_id = c.post_id
LEFT JOIN user u ON p.owner_id = u.`id`
GROUP BY c.post_id
ORDER BY number DESC 
于 2013-01-16T16:54:49.143 に答える
2

コメントテーブルでLEFTJOINを使用する

これを試して:

SELECT username, p.post_id, category_id, UNIX_TIMESTAMP(p.datetime) AS DATETIME, 
       p.body, p.owner_id, COUNT(comment_id) AS number
FROM posts p 
INNER JOIN user u ON p.owner_id = u.id
LEFT JOIN comments c ON p.post_id = c.post_id 
GROUP BY p.post_id
ORDER BY number DESC;
于 2013-01-16T16:54:30.257 に答える