webForumDet fria alternativet

intervallhantering med SQL

Databaser & SQL

2 svar · 218 visningar · startad av Naaz

Medlem sedan maj 200333 inlägg
Frågan#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

Medlem sedan juli 20011 304 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 :)

Medlem sedan dec. 200012 464 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.

279 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
153 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)