У меня есть сайт, который отображает сообщения.Я хочу, чтобы прокрутка сайта велась как твиттер - прокрутка вниз будет отображать все больше и больше постов, бесконечно.Предположим, у меня есть следующие таблицы:
Таблица сообщений для всех сообщений.Каждый пост связан с одним человеком
CREATE TABLE [dbo].[Post](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[PersonId] [int] NOT NULL,
[PublishDate] [datetime] NOT NULL,
CONSTRAINT [PK_Post] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Таблица PostTag для хранения всех связанных тегов каждого поста.
CREATE TABLE [dbo].[PostTag](
[PostId] [bigint] NOT NULL,
[TagId] [int] NOT NULL,
CONSTRAINT [PK_PostTag] PRIMARY KEY CLUSTERED
(
[PostId] ASC,
[TagId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Для каждого пользователя сайта таблица UserPersonStatistics содержитколичество раз, когда он проявлял интерес к сообщению, связанному с человеком.
CREATE TABLE [dbo].[UserPersonStatistics](
[UserId] [bigint] NOT NULL,
[PersonId] [int] NOT NULL,
[Counter] [bigint] NOT NULL,
CONSTRAINT [PK_UserPersonStatistics] PRIMARY KEY CLUSTERED
(
[UserId] ASC,
[PersonId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Для каждого пользователя сайта таблица UserPostStatistics содержит количество проявлений интереса к сообщению.
CREATE TABLE [dbo].[UserPostStatistics](
[UserId] [bigint] NOT NULL,
[PostId] [bigint] NOT NULL,
[Counter] [bigint] NOT NULL,
CONSTRAINT [PK_UserPostStatistics] PRIMARY KEY CLUSTERED
(
[UserId] ASC,
[PostId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Для каждого пользователя сайта таблица UserTagStatistic содержит количество раз, когда он проявил интерес к сообщению, связанному с тегами.
CREATE TABLE [dbo].[UserTagStatistics](
[UserId] [bigint] NOT NULL,
[TagId] [int] NOT NULL,
[Counter] [bigint] NOT NULL,
CONSTRAINT [PK_UserTagStatistics] PRIMARY KEY CLUSTERED
(
[UserId] ASC,
[TagId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Мне нужна хранимая процедура, которая для каждого пользователя возвращает 35 различныхкаждый раз, когда «запоминает» последние 35 сообщений, поэтому они не возвращают те же самые сообщения, и 35 сообщений должны состоять из: 15 сообщений для самого популярного тега (UserTagStatistics) 15 сообщений для самого популярного человека (UserPersonStatistics)) 5 самых популярных сообщений (UserPostStatistics)
Одна проблема заключается в том, что процедура должна возвращать 35 различных сообщений каждый раз.Еще одна проблема заключается в том, что пост может возвращаться один раз как самый популярный пост, один раз как пост самого популярного тега и один раз как пост самого популярного человека.Этот пост следует считать один, а не три раза.Выполнение хранимой процедуры имеет решающее значение.
Я знаю, это очень сложный вопрос.Любые мысли приветствуются.
Круви