webForumDet fria alternativet

returnera slumpad rad

Databaser & SQL

2 svar · 540 visningar · startad av Vinnaren

Medlem sedan sep. 2005833 inlägg
Frågan#1

Har följande:

ALTER PROCEDURE dbo.GetRandomMember
	(
	@CityId int = 0,
	@Name varchar(50) = null
	)
AS

SELECT MemberId
FROM Member

WHERE (CityId = @CityId OR @CityId = 0)
AND ([Name] like '%'+@Name+'%' OR @Name is null)
AND Status = 1
ORDER BY Place DESC, [Name] ASC

Nu vill returnera en slumpad rad av resultatet som denna fråga ger.(är det möjligt att ju högre Place värde man har ju större chans ska det vara att man blir vald?)

Som frågan är nu returnerar den samma hela tiden. :OO

Anv MSSQL

Går detta o lösa??

Tacksam för all hjälp :stud

Medlem sedan juni 20008 205 inlägg
#2

Vinnaren skrev:

Nu vill returnera en slumpad rad av resultatet som denna fråga ger.(är det möjligt att ju högre Place värde man har ju större chans ska det vara att man blir vald?)

Någonting sånt här, kan det bli:
SELECT TOP 1 * FROM grejen WHERE blahablaha ORDER BY Place * RAND(CAST(NEWID() AS VARBINARY)) DESC

Dvs, sortera resultatet på Place multiplicerat med ett slumpmässigt tal i intervallet [0..1). Större värden för Place kommer genomsnittligen få högre resultat av den uträkningen, men de kan lika väl få resultat 0. (Men om någon rad har Place <= 0 kommer den sannolikt aldrig att väljas, vilket förstås går att åtgärda med listiga subselects.)

Medlem sedan sep. 2005833 inlägg
#3

tack, ser ut att fungera kanon (y)

262 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)