Объединение двух запросов в один с использованием Group By в MySQL - PullRequest
1 голос
/ 15 июня 2011

В настоящее время я пытаюсь получить все материалы от одного пользователя вместе со всеми комментариями по конкретной заявке. То, как я это делаю, крайне неэффективно (запрос внутри цикла).

Мне сказали использовать Group By, но я не уверен, как заставить его работать должным образом.

Первый запрос для выбора всей информации о отправке:

SELECT
    submissions.user_id,
    submissions.id,
    submissions.quote,
    submissions.filename,
    submissions.date_added,
    submissions.views
FROM
    `submissions`
WHERE
    submissions.user_id = ?
ORDER BY
     submissions.date_added
DESC

Второй (для получения количества комментариев):

SELECT
    count(id) AS `comments`
FROM
    `comments`
WHERE
    submission_id = '{$subId}'

Это работает, но так как они станут медленными, поэтому я попытался придумать это, но не уверен, как правильно его выполнить.

SELECT
    submissions.user_id,
    submissions.id,
    submissions.quote,
    submissions.filename,
    submissions.date_added,
    submissions.views,
    COUNT(comments.id) as `comment`
    comments.submission_id
FROM
    submissions
LEFT JOIN
    comments
ON
    submissions.id=comments.submission_id
WHERE
    submissions.user_id = ?
GROUP BY comment

Любые предложения о том, как подойти к этому? Причина, по которой я изначально не объединял первые два запроса, заключается в том, что count всегда будет возвращать одну строку для всего запроса.

1 Ответ

2 голосов
/ 15 июня 2011

Попробуйте это (я только что добавил запятую после comment на основе вашего комментария с ошибкой):

    SELECT
        submissions.user_id,
        submissions.id,
        submissions.quote,
        submissions.filename,
        submissions.date_added,
        submissions.views,
        COUNT(comments.id) as `comment`,
        comments.submission_id

    FROM
        submissions
    LEFT JOIN
        comments
    ON
        submissions.id=comments.submission_id
    WHERE
        submissions.user_id = ?
    GROUP BY submissions.user_id,
        submissions.id,
        submissions.quote,
        submissions.filename,
        submissions.date_added,
        submissions.views,
        comments.submission_id
...