Я делаю простой форум, и в списке тем я хочу показать классическое "последнее сообщение (user) at (date)". Я использую только одну таблицу, чтобы содержать все сообщения на форуме, где сообщения с полем parentPost, не равным нулю, являются ответами в теме.
Это таблицы и необходимые поля, из которых мне нужны данные:
forumPosts
- id : целое число, первичный ключ
- title : строковое значение
- дата : строковое значение
- parentPost : целое число (Это поле = идентификатор исходного сообщения в теме. Если значение равно NULL, сообщение является "исходным сообщением в теме")
- author : целое число, внешний ключ к таблице пользователей
- countAnswers : целое число
- lastPost : целое число, (Это поле = идентификатор последнего сообщения, на которое был дан ответ. Используется, только когда поле parentPost-field = NULL)
пользователи
- ИД пользователя : целое число, первичный ключ
- firstName : строковое значение
- фамилия : строковое значение
На данный момент у меня есть этот запрос:
SELECT forumPosts.id, forumPosts.title, forumPosts.date, forumPosts.author, forumPosts.countAnswers, users.firstName, users.lastName
FROM forumPosts
INNER JOIN users ON forumPosts.author = users.userid
WHERE forumPosts.parentPost IS NULL ORDER BY id DESC;
Возвращает все, что мне нужно (ID, заголовок, дата, автор и количество ответов), за исключением даты и автора последнего опубликованного ответа.
Кроме того, я хотел бы получить следующее:
Дата последнего сообщения в теме, то есть сообщение с наибольшим идентификатором и parentPost = forumPosts.id. Я также хотел бы получить firstName и lastName от пользователя, который разместил этот ответ.
Я уже давно дурачусь с разными объединениями и производными таблицами и тому подобным, но, похоже, я не могу понять это правильно. В идеале я хотел бы вернуть таблицу со следующими полями:
- ID
- название
- дата
- 1069 * ПгвЬЫат *
- Фамилия
- countAnswers
- lastReplyDate
- lastReplyFirstName
- lastReplyLastName
Мне это кажется возможным, но я, очевидно, не могу этого сделать.
Надеюсь, вы поняли мой довольно сложный вопрос, и я благодарю вас за все ответы.
Раствор
SELECT forumPosts.id, forumPosts.title, forumPosts.date, forumPosts.author, forumPosts.countAnswers, users.firstName, users.lastName,
lastPost.date AS lastPostDate, lastUser.firstName AS lastPostFirstName, lastUser.lastName AS lastPostLastName
FROM forumPosts AS lastPost INNER JOIN
users AS lastUser ON lastPost.author = lastUser.userid INNER JOIN
forumPosts INNER JOIN
users ON forumPosts.author = users.userid ON lastPost.id = forumPosts.lastPost
WHERE (forumPosts.parentPost IS NULL)
ORDER BY forumPosts.id DESC
Это сработало. Очень типично, найти свой ответ через минуту после того, как я потратил много времени на написание поста здесь: - \