Как объединить три степени в MySQL - PullRequest
0 голосов
/ 01 июня 2011

У меня есть следующие таблицы:

users(id, name) posts (id, text, userId) comments (id, text, userId, postId)

Я хочу вернуть сообщение, имя владельца, комментарии и владельца каждого комментария. Я не могу получить данные для владельца комментария. Я написал это:

SELECT posts.id, posts.text, users.id, users.name, comments.text AS commentText, commenters.id, commenters.name
FROM posts
    JOIN users
        ON posts.userId = users.id
    LEFT JOIN comments
        ON posts.id = comments.postId 
            LEFT JOIN users AS commenters
                ON comments.userId = users.id
        WHERE posts.id = @postId

Проблема с этим запросом заключается в том, что столбцы commenters.id и commenters.name возвращаются пустыми. Есть идеи, где я ошибся?

1 Ответ

3 голосов
/ 01 июня 2011

Хмм, разбить запрос вниз.

ОК, во-первых, небольшая поправка

SELECT posts.id, posts.text, users.id, users.name, comments.text AS commentText, commenters.id, commenters.name
FROM posts
    JOIN users
        ON posts.userId = users.id
    LEFT JOIN comments
        ON posts.id = comments.postId 
            LEFT JOIN users AS commenters
                ON comments.userId = commenters.id

(у вас был users.id, а не commenters.id)

, во-вторых, если это не помогает, разбейте части запроса, чтобы убедиться, что select * from comments, и присоединитесь к пользователям, чтобы проверить, работает ли ссылка на пользователей.Сделайте то же самое для сообщений .. если это работает .. дайте мне знать, и мы можем посмотреть дальше, где это идет не так

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...