Re: [問題] 上一頁/下一頁之SQL探討?

看板C_Sharp (C#)作者 (咖啡)時間18年前 (2008/06/19 23:29), 編輯推噓4(400)
留言4則, 2人參與, 最新討論串2/4 (看更多)
※ 引述《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

06/20 09:47, , 1F
因為我是用get方式到另一頁,也不想把頁碼傳入(url太雜)
06/20 09:47, 1F

06/20 09:48, , 2F
後來決定還是把所有key取出作過濾,解決這樣的需求
06/20 09:48, 2F

06/20 09:48, , 3F
至少它比datasource或完全的datatable省資料囉!
06/20 09:48, 3F

06/20 18:33, , 4F
唉~細看需求還是不是很了解..
06/20 18:33, 4F
文章代碼(AID): #18MdjT6G (C_Sharp)
文章代碼(AID): #18MdjT6G (C_Sharp)