webForumDet fria alternativet

intervallhantering med SQL

2 svar · 218 visningar · startad av Naaz

NaazMedlem sedan maj 200333 inlägg
#1

Hej!
Jag har en tabell som heter Nyheter som innehåller logiskt nog nyheter. På websidan vill jag endast visa 15 nyheter åt gången. De resterande nyheterna ska man komma åt genom att klicka på länken som anger nästa intervall (1-15, 16-30, 31-45, osv). De senaste nyheterna ska komma först.

Så därför försöker jag skriva en SP (Skriven för SQL Server) som tar två argument:
* en siffra som anger start,
* en siffra som anger antal poster som ska hämtas (tex 15).

Så när användaren klickar på länken "16-30" ska jag visa 15 nyheter men det ska vara den 16:e senaste nyheten och 14 nyheter som skrevs innan den 16:e nyheten (hoppas ni förstår hur jag menar).

Mitt problem är att start och nyhetsID inte är samma sak. Så jag kan inte använda nyhets id. Hur skriver man en sån SP? Ska man använda TOP, COUNT, annat och i sånafall kan ni ge ett exempel hur sql-koden ser ut?

Mvh,
Naz

JonMedlem sedan juli 20011 126 inlägg
#2

Jag håller på med en liknande funktion med har också lite problem. Du kan ju se om mitt problem löser sig och i så fall använda det :)

LarsGMedlem sedan dec. 200012 465 inlägg
#3

En variant är att skapa en temp-tabell

create procedure mc_2 (@start int, @antal int)
as
set nocount on
create table #t (id int identity, <övriga kolumner>)

insert into #t select * from nyheter

select * from #t where id between @start and @start + @antal

Det går att använda top men då måste du bygga sql-satsen dynamiskt

exec ('select top ' + @antal + ' * from nyheter 
where id not in (select top ' + @start + 'id from nyheter')

Du kan ju testa vad som är bäst.

Genererad på 371 ms · cache AV · v20260730165559-full.f96bc7eb