Здравствуйте, нужна помощь с тем, как сделать это в новостях SQL Server из форума Темы / Сообщения - PullRequest
0 голосов
/ 21 июля 2009

Хорошо, у меня есть три таблицы, которые все общаются друг с другом.

ForumTopic t
ForumMessage m
ForumUser u

То, что я пытаюсь сделать, это получить первое сообщение каждой темы.

Я пробовал это

  SELECT
   m.[Message], m.[TopicID], m.[Posted], u.Name, t.[Views], t.NumPosts,
   t.Topic
   FROM [ForumMessage] m
   INNER JOIN ( SELECT TopicID, Topic, [Views], NumPosts, ForumID
    FROM [ForumTopic]
    GROUP BY TopicID, Topic, [Views], NumPosts, ForumID ) t ON t.TopicID = m.TopicID
   INNER JOIN [ForumUser] u
   ON u.UserID = m.UserID
   WHERE t.ForumID IN(1,2)
   ORDER BY m.Posted DESC;

И результат указан ниже

 Message    TopicID Posted  Name    Views   NumPosts    Topic
    6   2009-07-20 18:14:06.270 Ravenal 26  3   GENESIS 2.5.1a RELEASE
    6   2009-07-20 18:08:51.027 Ryan    26  3   GENESIS 2.5.1a RELEASE
    6   2009-07-20 17:06:33.550 Ravenal 26  3   GENESIS 2.5.1a RELEASE
    4   2009-07-17 14:22:47.560 Ravenal 14  1   MyGameTools IRC
    3   2009-07-17 01:09:22.403 Ravenal 43  1   GENESIS 2.5.0b RELEASE
    2   2009-07-17 00:48:30.873 Ravenal 44  2   GENESIS 2.5.0a RELEASE
    2   2009-07-16 23:08:44.830 Ravenal 44  2   GENESIS 2.5.0a RELEASE
    1   2009-07-16 23:03:11.790 Ravenal 20  1   Welcome to MyGameTools

Так что я пытаюсь выяснить, как сделать так, чтобы все выглядело так

 Message    TopicID Posted  Name    Views   NumPosts    Topic
    6   2009-07-20 18:14:06.270 Ravenal 26  3   GENESIS 2.5.1a RELEASE
    4   2009-07-17 14:22:47.560 Ravenal 14  1   MyGameTools IRC
    3   2009-07-17 01:09:22.403 Ravenal 43  1   GENESIS 2.5.0b RELEASE
    1   2009-07-16 23:03:11.790 Ravenal 20  1   Welcome to MyGameTools

Любая помощь будет высоко ценится.

Ответы [ 3 ]

0 голосов
/ 21 июля 2009

Вы пытались использовать производную таблицу, чтобы получить максимальное время публикации по каждой теме из таблицы ForumMessages?

например

SELECT   m.[Message], m.[TopicID], m.[Posted], u.Name, t.[Views], t.NumPosts,   t.Topic   FROM 
( SELECT TopicID, Max(Posted) MaxPosted
  FROM ForumMessage
  GROUP BY TopicID ) MaxMessage
INNER JOIN [ForumMessage] m   
  ON m.TopicID = maxMessage.TopicID
  AND m.Posted = maxMessage.MaxPosted
INNER JOIN ( SELECT TopicID, Topic, [Views], NumPosts, ForumID
    FROM [ForumTopic]
    GROUP BY TopicID, Topic, [Views], NumPosts, ForumID ) t 
  ON t.TopicID = m.TopicID
INNER JOIN [ForumUser] u
   ON u.UserID = m.UserID   
WHERE t.ForumID IN(1,2)   
ORDER BY m.Posted DESC;
0 голосов
/ 21 июля 2009

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

SELECT  m.[Message], m.[TopicID], m.[Posted], u.Name, t.[Views], t.NumPosts,   t.Topic   FROM 
( SELECT TopicID, Min(Posted) MaxPosted
  FROM ForumMessage
  GROUP BY TopicID ) MaxMessage
INNER JOIN [ForumMessage] m   
  ON m.TopicID = maxMessage.TopicID
  AND m.Posted = maxMessage.MaxPosted
INNER JOIN [ForumTopic] t
  ON t.TopicID = m.TopicID
INNER JOIN [ForumUser] u
   ON u.UserID = m.UserID   
WHERE t.ForumID IN(1,2)  
ORDER BY m.[Posted] DESC
0 голосов
/ 21 июля 2009

Это дает несколько записей для сообщения, потому что вы СОЕДИНЯЕТЕ его с таблицей пользователей, и сообщение имеет несколько пользователей (кроме темы 4,3,1).

РЕДАКТИРОВАТЬ: вам придется уменьшить вывод внешнего запроса, ограничив, чтобы дать 1 запись (в соответствии с максимальным (PostedDateTime).

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