Запись в таблице с помощью GROUP BY и ORDER BY MAX()

#mysql

#mysql

Вопрос:

Этот код работает правильно

 SELECT
    c.id_article,
    a.titre AS title_article
FROM comments AS c
LEFT JOIN articles AS a
    ON a.id = c.id_article
WHERE c.hide = 0
GROUP BY c.id_article
ORDER BY MAX(c.date) DESC
LIMIT 0, 6
  

Но мне нужно имя пользователя последнего комментария в статье.

Я пытаюсь это

 SELECT
    c.id_article,
    a.titre AS title_article,
    u.nom_utilisateur AS user_name
FROM comments AS c
LEFT JOIN articles AS a
    ON a.id = c.id_article
LEFT JOIN membres AS u
    ON c.id_user = u.id
WHERE c.hide = 0
GROUP BY c.id_article
ORDER BY MAX(c.date) DESC
LIMIT 0, 6
  

и не работает…

Любая помощь?

(извините за мой плохой английский …)

Комментарии:

1. Что не работает? какая-либо ошибка?

2. Что вы хотите получить? Вы уверены, что комментарии находятся в левом соединении со статьями? Может ли комментарий быть без статьи?

3. Я пытаюсь получить имя пользователя из последнего комментария, опубликованного в статье. Моя фактическая функция извлекает последние комментарии из списка статей.

Ответ №1:

Без сообщения об ошибке или описания, что не так, сложно сказать, но в любом случае вы не включили u.nom_utilisateur в GROUP BY инструкцию.

MySQL часто позволяет это без выдачи ошибки, но это может привести к неожиданным результатам.

 SELECT
    c.id_article,
    a.titre AS title_article,
    u.nom_utilisateur AS user_name
FROM comments AS c
LEFT JOIN articles AS a
    ON a.id = c.id_article
LEFT JOIN membres AS u
    ON c.id_user = u.id
WHERE c.hide = 0
GROUP BY c.id_article, u.nom_utilisateur
ORDER BY MAX(c.date) DESC
LIMIT 0, 6
  

Комментарии:

1. Я пытаюсь получить имя пользователя из последнего комментария, опубликованного в статье. Моя фактическая функция извлекает последние комментарии из списка статей.

Ответ №2:

У меня есть частичное решение.

Я использую этот код для извлечения последних комментариев из статей :

 SELECT
    c.id_article,
    MAX(c.id) AS last_id_comment,
    a.titre AS title_article
FROM comments AS c
LEFT JOIN articles AS a
    ON a.id = c.id_article
WHERE c.hide = 0
GROUP BY c.id_article
ORDER BY MAX(c.date) DESC
LIMIT 0, 6
  

И после того, как в while для первого ВЫБОРА я использую этот код для получения имени пользователя из последнего комментария :

 SELECT
    u.nom_utilisateur AS username
FROM comments AS c
LEFT JOIN membres AS u
    ON u.id = c.id_user
WHERE c.id = :last_id_comment
  

Не лучшее решение, но оно работает.