Я пытаюсь написать приложение для социальной сети, но я застрял в части постов / комментариев на стене. У меня есть две таблицы, POSTS и КОММЕНТАРИИ ;
CREATE TABLE [dbo].[COMMENTS](
[COMMENT_ID] [int] IDENTITY(1,1) NOT NULL,
[POST_ID] [int] NOT NULL,
[USER_ID] [smallint] NOT NULL,
[COMMENT] [nvarchar](max) NOT NULL,
[CREATED] [datetime]
)
-- COMMENT_ID is PK
CREATE TABLE [dbo].[POSTS](
[POST_ID] [int] IDENTITY(1,1) NOT NULL,
[USER_ID] [int] NOT NULL,
[POST] [nvarchar](max) NOT NULL,
[CREATED] [datetime]
)
-- POST_ID is PK
Я пытаюсь выбрать TOP N записей из таблицы POSTS и все комментарии принадлежат этим записям. Я использую следующий запрос, но он выбирает все записи из POSTS и COMMENTS, что замедляет работу сервера, так как есть очень много POSTS
SELECT POST_ID, NULL AS COMMENT_ID, USER_ID, POST, CREATED, POST_ID AS SEQUENCE FROM POSTS
UNION
SELECT POST_ID, COMMENT_ID, USER_ID, COMMENT AS POST, CREATED, POST_ID AS SEQUENCE FROM COMMENTS
ORDER BY SEQUENCE DESC
Как выбрать ТОП 10 постов и все комментарии к этим сообщениям? Я также хотел бы добавить эти записи на страницу, так что, возможно, код подкачки был бы для меня идеальным. Я имею в виду, вместо того, чтобы выбирать топ-10 сообщений, я хотел бы выбрать 10 постов со страницы 2 и их комментарии.
Я не уверен, возможно ли это с этой структурой таблицы. Если это не так, возможно, вы должны предложить мне лучшую структуру стола.
Спасибо.
РЕДАКТИРОВАТЬ: Я хочу, чтобы набор записей был, как показано ниже. Я думаю, что приведенная ниже таблица лучше, чем INNER JOIN-ed. Все, что я хочу, это ВЫБЕРИТЕ ТОП N постов , ничего более.
POST_ID | COMMENT_ID | USER_ID | POST | CREATED
----------------------------------------------------------------------------------------
3 NULL 2 This post has no comments 2011-02-12
1 NULL 1 A new post 2011-02-11
1 1 2 Comment for post 1 2011-02-11
1 2 1 Another comment for post 1 2011-02-11
1 5 2 Another comment for post 1 2011-02-11
2 NULL 2 Another post 2011-02-07
2 3 1 Comment for post 2 2011-02-07
2 4 2 Another comment for post 2 2011-02-07