Вытащить резюме недавно опубликованных в темах с MySQL - PullRequest
0 голосов
/ 31 мая 2011

У меня довольно простая система форумов.Три основные таблицы, Тема, Комментарий и Пользователь, имеют все обычные поля, которые вы себе представляете, такие как автоинкрементные первичные ключи и внешние ключи друг к другу, поэтому я не думаю, что мне нужно подробно разбирать все это

То, что я пытаюсь сделать, - это получить список самых последних опубликованных тем.Представление списка должно показывать заголовок темы, тело исходного комментария / сообщения и имя автора, но список должен быть упорядочен по темам, которые были недавно опубликованы в первую очередь.

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

Вот то, что я придумал первым, но он упорядочивает темы в соответствии со временем первого сообщения.

SELECT topic.id as topic_id, topic.title as topic_title, topic.datePosted as datePosted, topic.views as views, topic.numComments as numComments,
    comment.ID as commentID, comment.body as body,
user.ID as userID, user.firstName, user.lastName, user.title as user_title, user.city, user.state, user.thumbnail

FROM comment INNER JOIN topic ON comment.topicID = topic.id
INNER JOIN user ON comment.userID = user.id
WHERE comment.id
        IN (
        SELECT min( comment.id )
        FROM COMMENT INNER JOIN topic ON comment.topicID = topic.id
        GROUP BY topic.id
        )

ORDER BY commentID desc';

1 Ответ

0 голосов
/ 31 мая 2011

Хорошо, вот мой первый удар по тому, что я думаю , о котором вы просите, список недавно опубликованных комментариев в каждой теме. Дайте мне знать, если это не то, что вы ищете:

SELECT
  t.title,
  t.views,
  t.numComments,
  c.id,
  c.datePosted,
  c.body,
  u.firstName,
  u.lastName
FROM
  topic AS t
    INNER JOIN
      ( SELECT
          c_inner.topicId,
          MAX(c_inner.datePosted) AS latestPosted
        FROM
          comment AS c_inner
        GROUP BY
          c_inner.topicId ) AS cmax
      ON t.id = cmax.topicId
    INNER JOIN comment AS c
      ON c.topicId = cmax.topicId AND c.datePosted = cmax.latestPosted
    INNER JOIN user AS u
      ON c.userId = u.id
ORDER BY c.datePosted DESC;

Если я неправильно понял, что вы ищете, можете ли вы опубликовать пример желаемых результатов?

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