MSSQL limit

Adott az alábbi mysql kód:
select * from termekek where 1 limit 20,10

Ezt szeretném mssql-ben lefuttatni. Létezik rá valami elegáns megoldás, ami könnyen paraméterezhető php-ból?

Hozzászólások

Ha legalább a TOP mellé lenne egy BOTTOM is, máris egyszerű lenne. De nincs...

nem értek mssql-hez, de ezt a példát találtam

SELECT * FROM
(SELECT row_number() OVER (ORDER BY column) AS rownum, column2, column3, .... columnX FROM table) AS A
WHERE A.rownum BETWEEN 100 AND 200

elvileg mssql 2005 fölött működik

Order by hasznalataval meg lehetne csinalni, de a feltett kerdesben nem volt semmilyen rendezes.

Esetleg az jutott most eszembe, hogy az mssql_data_seek segitsegevel oda tudnad mozgatni a kurzort ahova akarod. Tehat pl.

select top 30 * from termekek

, es utana

mssql_data_seek ($result_identifier , 20)

.

Egy a gond ezzel:
"moves the internal row pointer of the MS SQL result ..." vagyis a mar _leszedett_ sorok kozt tudsz mozogni, a db szerver fele uj query nem megy, tehat vagy eloszedsz minden sort, es kikalkulalod, hogy hova kell essel, vagy eloszeded az osszes id-t, kikalkulalod, hogy hova kell essel, es meg egy queryvel leszeded az adott id-ju sorokat.

--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Hozzateszem, MSSQL-hez nem ertek, de AFAIK az Oracle ROWNUM-s szenvedesehez hasonloan kell megoldani ott is.

(Egyebkent SQL standardba igazan belerakhattak volna a LIMIT .. OFFSET .. jellegu zaradekot.)

----------------
Lvl86 Troll

Tess egy viszonylagosan altalanosan hasznalhato modszer:

$query = '
WITH paging AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY '.$orderBy.') AS \'row_number\', *
FROM
(
'.$query.'
) LIST
)
SELECT
(
SELECT
MAX(row_number)
FROM
paging
) record_count, *
FROM
paging
WHERE
row_number BETWEEN '.$offset.' AND '.($offset + $itemsPerPage).'
';

A megfelelo valtozokat helyettesitsd be es akkor minden szipi szupi lesz. De a google meg mindig gyorsabb nalam :)

------------------
http://www.youtube.com/watch?v=Sf8cM7f6P2I