TSQL에서 의사 난수를 사용하여 무작위 값의 재현 가능한 목록을 생성 할 수 있습니다.
@Seed
의 계산에서 주석 구분 기호를 제거하면 새로운 값인 @LastLogin
마다 시퀀스가 달라집니다.
-- Some user specific value that does not change.
declare @UserId as Int = 42
-- Some user specific value that changes as often as you want the order to change for a user.
declare @LastLogin as DateTime = SysDateTime()
-- Paging parameters.
declare @PageSize as Int = 10
declare @PageNumber as Int = 2
select @UserId as Seed, @UserId + DatePart(ms, @LastLogin) as AlternativeSeed, @LastLogin as LastLogin
declare @Seed as Int = @UserId -- + DatePart(ms, @LastLogin)
; with Numbers (Number, PseudorandomNumber) as (
-- Select the "first" row from your data.
select 1, Rand(@Seed)
union all
-- Add the "next" row from your data.
select Number + 1, Rand(1000000 * PseudorandomNumber)
from Numbers
where Number < 100
),
-- Add row numbers to the previous rowset to allow paging.
NumbersWithRowNumber as (
select *, Row_Number() over (order by PseudorandomNumber) as RowNumber
from Numbers
)
-- Select the requested page of data.
select *
from NumbersWithRowNumber
where RowNumber between @PageSize * (@PageNumber - 1) + 1 and @PageSize * @PageNumber
order by RowNumber
무작위 화의 범위는 무엇입니까? 단일 사용자가 페이지를 넘길 때 일관되게 임의의 순서로 목록을 보길 원합니다. 다른 사용자는 그것을 다르게 본다? 목록을 다시 방문하는 단일 사용자는 매일 그것을 어떻게 보나요? – HABO
페이징 및 주문은 프리젠 테이션 레이어 작업입니다. 나는 app에 투표합니다. – frankc