On 12/18/2012 8:23 AM, Leif Neland wrote:
> Skal man i en webside dele noget op i sider, f.ex. 1-10 på 1. side,
> 10-19 på næste side osv, ville man i mysql bruge
> LIMIT $first,$number_per_page
>
> Det findes ikke i mssql; der har jeg fundet ud af dette:
>
> WITH o AS (
> SELECT (..felter...),
> ROW_NUMBER() OVER (ORDER by (..felt..) ) AS rowno
> FROM tabel
> )
> SELECT *,(SELECT COUNT(*) FROM o) rows
> FROM o WHERE rowno BETWEEN $first AND ($first+$number_per_page-1);
>
> Man får i et query også 'rows' så man kan lave sin 'første forrige næste
> sidste' navigation uden at skulle genere databasen een gang til.
>
> Jeg formoder at optimizeren er smart nok til at "SELECT COUNT(*) FROM o"
> kun bliver beregnet een gang.
Det burde den, men der er jo ingen garanti, hvorfor ikke bare
2 gange SELECT, så er du jo sikker.
Arne