SQL - количество запросов для связанной таблицы, затронутой другим объединением - PullRequest
0 голосов
/ 02 сентября 2018

Таблицы в этом запросе следующие:

  • Сообщение * * 1004
  • Пользователь
  • Комментарий
  • Tag
  • Tagged_Post
  • post_category

Я пытаюсь запросить всю релевантную информацию о сообщении, которое имеет такие связи, как пользователь, создавший сообщение, комментарии к этому конкретному сообщению, теги «много или нет» в сообщении и категория, в которой находится сообщение.

Вот мой SQL-запрос:

$sql = "SELECT post.*, user.name, user.avatar, group_concat(DISTINCT tag.slug) as tags, post_category.slug as category, count(comment.post_id) as comments
FROM post
INNER JOIN user on user.id = post.user_id
INNER JOIN post_category on post_category.id = post.category_id
LEFT JOIN tagged_post on tagged_post.post_id = post.id
LEFT JOIN tag on tagged_post.tag_id = tag.id
LEFT OUTER JOIN comment on post.id = comment.post_id
GROUP BY post.id";

Это выводит следующее:

Array
(
    [0] => Array
        (
            [id] => 1
            [user_id] => 1
            [category_id] => 1
            [title] => Hi, I'm Bob Ross. AMA
            [body] => That's right. I'm bob ross and this is my post. I'm not dead btw
            [date_created] => 2018-09-02 11:45:29
            [date_modified] => 
            [name] => bob_ross
            [avatar] => 
            [tags] => painting,ama
            [category] => news-and-politics
            [comments] => 6
        )

    [1] => Array
        (
            [id] => 2
            [user_id] => 2
            [category_id] => 2
            [title] => I'm Saul Goodman!!
            [body] => woohoo
            [date_created] => 2018-09-02 12:12:12
            [date_modified] => 
            [name] => saul_goodman
            [avatar] => 
            [tags] => 
            [category] => general-discussion
            [comments] => 0
        )

    [2] => Array
        (
            [id] => 3
            [user_id] => 3
            [category_id] => 4
            [title] => yo im jesse
            [body] => test
            [date_created] => 2018-09-02 12:24:45
            [date_modified] => 
            [name] => jesse_pinkman
            [avatar] => 
            [tags] => ama,painting
            [category] => animals-and-nature
            [comments] => 4
        )

)

Количество тегов влияет на количество комментариев. Например, в первом посте есть 3 комментария и 2 тега. Количество комментариев к сообщению с идентификатором 1 показывает 6. Если бы я добавил дополнительный тег к этому сообщению (всего 3 тега), то счетчик комментариев отображал бы 9 (3 тега x 3 комментария).

Может кто-нибудь помочь мне понять, почему это происходит?

1 Ответ

0 голосов
/ 02 сентября 2018

Причина в том, что использование нескольких JOIN s действует как декартово произведение, поэтому вы получаете 2 * 3 = 6 строк для группы. Когда вы применяете счетчик, вы получаете 6 действительных (ненулевых) значений, и это ваш результат.

Чтобы исправить, используйте:

... COUNT(DISTINCT comment.comment_id) as comments
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...