最近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)

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 jack4689 的頭像
    jack4689

    蔡阿志的部落格

    jack4689 發表在 痞客邦 留言(0) 人氣()