1

次の3つのテーブルがあります。

  1. 投稿
  2. posts_replies
  3. 好き

このクエリは私に投稿を返し、その返信はすべて問題なくカウントされます。

SELECT posts.title, posts.num, posts.status, posts.category, posts.content, posts.member_num, COUNT( posts_replies.blyrb_num ) AS count, COUNT( likes.comment_num ) AS likes_count
FROM posts_replies
INNER JOIN posts ON ( posts_replies.blyrb_num = posts.num )
LEFT JOIN likes ON ( likes.comment_num = posts_replies.num )
WHERE posts.status <>3
AND posts.access = 'Public'
AND (
posts.title LIKE '%dress%'
OR posts.content LIKE '%dress%'
)
GROUP BY posts.num

ただし、問題は、このクエリが返信のある投稿のみを返すことです。私はそのような制限を望んでいません、私は彼らが返信を持っているかどうかにかかわらずすべての投稿が欲しいです。

私がここで間違っていることについてのアイデアはありますか?

ありがとうございました

4

2 に答える 2

2

'FROM'と最初の'JOIN'のテーブルを入れ替え、最初の'JOIN'をLEFTJOINに変更すると、次のようなトリックが実行されます。

SELECT posts.title, posts.num, posts.status, posts.category, posts.content, posts.member_num, COUNT( posts_replies.blyrb_num ) AS count, COUNT( likes.comment_num ) AS likes_count
FROM posts
LEFT JOIN posts_replies ON ( posts_replies.blyrb_num = posts.num )
LEFT JOIN likes ON ( likes.comment_num = posts_replies.num )
WHERE posts.status <>3
AND posts.access = 'Public'
AND (
posts.title LIKE '%dress%'
OR posts.content LIKE '%dress%'
)
GROUP BY posts.num
于 2013-03-03T08:53:28.397 に答える
1

やる事:

  • LEFT JOINの代わりに使用INNER JOIN
  • テーブルを交換します:POSTposts_replies

クエリ、

SELECT  posts.title, 
        posts.num, 
        posts.status, 
        posts.category, 
        posts.content, 
        posts.member_num, 
        COUNT( posts_replies.blyrb_num ) AS count, 
        COUNT( likes.comment_num ) AS likes_count
FROM    posts
        LEFT JOIN posts_replies 
            ON ( posts_replies.blyrb_num = posts.num )
        LEFT JOIN likes 
            ON ( likes.comment_num = posts_replies.num )
WHERE   posts.status <> 3 AND 
        posts.access = 'Public'
        AND 
        (
            posts.title LIKE '%dress%'
            OR posts.content LIKE '%dress%'
        )
GROUP   BY posts.num
于 2013-03-03T08:53:48.820 に答える