#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
Не лучшее решение, но оно работает.