作者casearchu (咖啡)
看板C_Sharp
標題Re: [問題] 上一頁/下一頁之SQL探討?
時間Thu Jun 19 23:29:32 2008
※ 引述《tomex (Tomex Ou)》之銘言:
: ASP.NET網頁設計裏,
: 原以為觀看detail資料的下方有個上一頁/下一頁很簡單
: 發現ASP.NET的Paper都是丟所有資料Datable
: 我嫌這樣資料量太大(畢竟只有1筆而己)
: 改用手寫下sql方式。
: 以為多下兩道大於或小於該key值的sql就好
: 但是考量此上/下頁的順序,
: 是根據前頁資料列表的排序規則(可能多欄排序)
: 細想之下,發現真的不簡單...
: 因為sql表中的資料並不一定連續。
: 請問該如何在不查詢所有資料下
: 得到指定筆項目的上/下筆資料呢?
: 難道最終仍是得把所有資料取出嗎?
: 不甘心呀!!
可以將上一頁的排序規則Keep到下一頁 存入ViewState中
之後Detail Page查的時候 依照之前的排序取出
SQL 2005前 取範圍的資料的方法
Select * FROM (Select Top 40000 * from Table Order by 排序欄位 ) A where Not
Exists ( Select * From (Select top 20000 id from Table Order by 排序欄位
) B where A.id=B.id )
SQL 2005後
SELECT * FROM (
SELECT *,ROW_NUMBER() OVER (ORDER BY 排序欄位 DESC) AS RowNumber
FROM Table ) T
WHERE T.RowNumber BETWEEN 20000 AND 40000
第一段的速度較快...Row_number()比較慢
如果你有用LINQ 那又是另外的語法了...
--
不知道我是不是有理解錯誤......
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.204.28.55
推 tomex:因為我是用get方式到另一頁,也不想把頁碼傳入(url太雜) 06/20 09:47
推 tomex:後來決定還是把所有key取出作過濾,解決這樣的需求 06/20 09:48
推 tomex:至少它比datasource或完全的datatable省資料囉! 06/20 09:48
推 teyou:唉~細看需求還是不是很了解.. 06/20 18:33