Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Незнаю как сделать...  [new]
Antropos
Guest
Всех с добрым утром!

Люди добрые помогите с запросом, итак ломал голову итак, и ничего не придумалось :(

Имеется 2-е таблицы, первая содержит в себе список всех существующих форумов, а вторая фактически служит индексатором какие форумы пользователь уже видел и когда, причем обновляется она по требованию пользователя.

fo_forums:
forum_id int,
forum_name Varchar(100),
forum_desc Varchar(250)

fo_last_seen:
forum_id int null,
post_id int null,
user_nick_name Varchar(20),
last_datetime datetime


Имеется также ХП которая получает 2 параметра: имя пользователя и время его запроса. ХП должна взять все существующие forum_id из fo_forums и внести их в fo_last_seen, при этом она добавляет к каждому внесеному forum_id также имя пользователя и время его запроса (@user_nick_name Varchar(20), @time_now datetime).

Сколько не думал пока пришел только к следующему:
// вначале вносятся forum_id в fo_last_seen из fo_forums, 
//затем в поля где есть только forum_id вносятся имя пользователя 
//и время, а потом удаляются старые поля

CREATE PROCEDURE dbo.AllForumsBeenSeen
(
	@user_nick_name Varchar(20),
	@time_now datetime
)

 AS

SET NOCOUNT ON
	
	INSERT INTO fo_last_seen (forum_id)
	      SELECT forum_id FROM fo_forums	

	UPDATE fo_last_seen SET last_datetime = @time_now, user_nick_name = @user_nick_name  
              WHERE user_nick_name = NULL
	
        DELETE FROM fo_last_seen 
              WHERE last_datetime < @time_now AND user_nick_name LIKE @user_nick_name

RETURN
GO

Но есть одна проблема, а вдруг несколько человек попросят обновить список увиденых форумов, тогда может получиться что имя Петя заполниться в поля Васи, да еще и заполниться могут неравномерно по количеству.

Есть ли какое-то решение для моего запроса, или приидется делать через курсоры ?
26 сен 04, 10:23    [987651]     Ответить | Цитировать Сообщить модератору
 Re: Незнаю как сделать...  [new]
sardonyx
Member

Откуда:
Сообщений: 39
CREATE PROCEDURE dbo.AllForumsBeenSeen
(
@user_nick_name Varchar(20),
@time_now datetime
)

AS

SET NOCOUNT ON

uPDATE fo_last_seen SET last_datetime = @time_now
WHERE user_nick_name = @user_nick_name

INSERT INTO fo_last_seen (forum_id,user_nick_name,last_datetime)
SELECT f.forum_id, @user_nick_name, @last_datetime
FROM fo_forums f left join fo_last_seen fs on f.forum_id=fs.forumid and fs.user_nick_name=@user_nick_name
where fs.forumid is null

RETURN
GO
26 сен 04, 14:15    [987741]     Ответить | Цитировать Сообщить модератору
 Re: Незнаю как сделать...  [new]
Antropos
Guest
sardonyx

Огромное спасибо!
28 сен 04, 16:38    [993830]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить