使用 php 存取 mssql 的人多少會有碰到分頁的麻煩, 在 mssql 的語法裡只有 top 可以決定要取回前幾筆資料, 例如
select top 10 * from table1.
這種做法在要取回第 10~20 筆的時候就會遇到麻煩, 以前的笨方法是使用
select top 20 * from table1
然後在 php 裡先濾掉前 10 筆後再開始輸出, 然而在將資料取回來的同時記憶體就悄悄被使用掉了 (如果是要取回 10000 ~ 10010 不就要多浪費一萬筆的記憶體空間??)
一直在想為什麼 mssql 不提供類似 mysql 語法裡面的 limit 功能, 就像是
select * from table1 limit 10000,10
簡單明瞭不是很好嗎? 在情非得已一定得從 mssql 裡取出不得不做分頁的大量資料為前題之下, 勉強找了一個可以湊合著用的方法
select top 10 * from table1 where id not in (select top 10000 id from table1 order by id asc) order by id asc
使用這種做法 id 必需要是唯一值, 暫時解決了遇到的困擾.
如果你(妳)有更好的解決方法的話, 也請不吝提供參考.
※附上 msdn 上的說明:http://msdn.microsoft.com/en-us/library/ms979197
文章定位: