最近php coding時剛好需要把兩個table的資料一起顯示在同一頁,並用分頁。在mysql的情況下,limit 只需代入起始index+要顯示的筆數,方便很多,比較好調整。但在sql server,沒有limit可用,除了top之外,好像只能在sql語法使用row_number()的方式,加入筆數限制,但不一樣的是代入的值,是要起始與結束index。
例:10筆做2分頁
mysql
limit 1, 5
limit 6, 5
sql server
row>=1 and row<=5
row>=6 and row<=10
那為了讓資料能正常顯示,於是花了些時間想一想,寫了基本的運算式
A類型筆數->a_rows
B類型筆數->b_rows
頁數->page
每頁筆數->per
_start, _end ->各類型的起始與結束index
if ($a_rows<= ($per*$page)){
if ($a_rows>($per*($page-1))){
$b_end = $per*$page-$a_rows;
$a_end = $a_rows;
$a_start = $per*($page-1)+1;
}else{
$b_rows-= $per*($page-1)-$a_rows;
$b_start = $per*($page-1)-$a_rows+1;
if ($b_rows>$per){
$b_end = $b_start+$per-1;
}else{
$b_end = $b_start+$b_rows-1;
}
$a_start = 0;
$a_end = 0;
}
}else{
$b_rows = 0;
$b_start = 0;
$b_end = 0;
}
算出來的start, end 再帶入sql裡吧
排序的話也請先各自排好喔~
這可以單純取筆數,如果取出來還要篩選的話,就不適用囉!!,必竟筆數都不準了...
如有更好的方式,歡迎提出
有找到bug,更正一下 (之前的測試筆數太少XD)
留言列表