webForumDet fria alternativet

Trubbel i en SP SELECT TOP

Databaser & SQL

4 svar · 199 visningar · startad av Nson

Medlem sedan juni 2001145 inlägg
Frågan#1

Jag sliter mitt hår för att få till en rutin som gör följande.

I databasen [dbo].[Users.Logs] om den senaste inlagda posten har värdena @GetUserName och @RetUserName i så fall skall vi inte göra något. Men om så är fallet då skall vi sätta in data.

Slänger med den SP'n som jag använder i dag. Den funkar inte alls då TOP 1 alltid blir sann när man väl besökt en sida en gång.

create procedure portal_SelectProfile
(
	@GetUserName nvarchar(50),
	@RetUserName nvarchar(50)
)
AS
BEGIN
Declare @LatestVisitor nvarchar(50)
Set @LatestVisitor = (SELECT TOP 1 Visitor FROM [dbo].[Users.Logs] WHERE Owner = @GetUserName ORDER BY ItemDate DESC)
	
	-- Hämta data att visa 
	
	SELECT 	
	Book,
	Movie,
	Music,
	Http,
	Signature,
	Presentation
	FROM 
	[Users.Profile]
	WHERE
	UserName = @GetUserName

	-- Uppdatera senaste besökarna

	if not @GetUserName = @RetUserName 
	begin

	-- Uppdatera antal sidvisningar

	UPDATE [Users.Profile] SET
	Displays = Displays + 1 
	WHERE UserName = @GetUserName

	IF @LatestVisitor IS NULL
	begin	
	INSERT INTO [dbo].[Users.Logs]
	(
	Visitor,
	Owner
	) VALUES (	
	@RetUserName,
	@GetUserName
	)

	end

	end
END
GO

Mvh Nson

Medlem sedan dec. 200012 464 inlägg
#2

Vad är problemet?

vad menar du med

om den senaste inlagda posten har värdena @GetUserName och @RetUser

?

Medlem sedan juni 2001145 inlägg
#3

Jag skall använda den för att skapa en databas med dom senaste besökarna på en profil sida. Men jag vill inte att en användare skall ladda om och ladda om sidan och på så sätt bara sätta sig själv i listan. Så vad jag vill att den skall göra är att den går in o ser i databasen om den senatse användaren i databasen är den samma som den som tittar nu. I så fall skall den inte göra något annars skall den skriva in GetUser och RetUser i databasen.

Vet i fan om det blev så mycket klokare, men jag tror du vet vad jag menar.

När jag kör min TOP så kommer den ju alltid att bli TRUE om användaren någonsinn varit inne på en användares sida. Jag vill bara se till så att han inte är den absolut senaste...

Medlem sedan dec. 200012 464 inlägg
#4
if  not exists (select * FROM [dbo].[Users.Logs]
WHERE Owner = @GetUserName 
and itemDate = (select max(itemDate) from [dbo].[Users.Logs] )) 
begin
  INSERT INTO [dbo].[Users.Logs]
    (
    Visitor,
    Owner
    ) VALUES (    
    @RetUserName,
    @GetUserName
    )
end
Medlem sedan juni 2001145 inlägg
#5

Du är en klippa som vanligt...

267 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)