程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> MS SqlServer 2000交換排序的一種方法

MS SqlServer 2000交換排序的一種方法

編輯:關於SqlServer

可能我說的交換排序還有點歧義。看下面的圖片123123.jpg
就是要實現這樣的排序。

首先數據庫結構得具備3個字段
ID      ,    Name      ,      OrderNum

排序的規則為,首先按OrderNum倒序排列,然後如果OrderNum 相同則按ID的倒序排列。
Sql語句為
 

Select * From Sorts Order By OrderNum Desc, ID    Desc



當點向上箭頭的時候,表示要把當前的記錄和上面的記錄交換,實現排序。同樣點向下箭頭的時候也一樣。


假設我們當需要把上圖中ID為1的記錄和ID為3的記錄交換。假設是把1向上和3交換(點1的上箭頭)。
如果,ID3的OrderNum 為2,ID1的OrderNum 為1,那麼直接交換OrderNum 就可以。看來是如此,但是真的可以麼?

假設數據如下:
ID            Name         OrderNum
4              ....               2
3               ....              2
6               ......            1
.........

上面的數據是可能的,假如把ID6的OrderNum 換成是2就跑第一個去了!

這裡就不詳細介紹各種可能了,我介紹下我采用的方法。
我使用存儲過程來解決這個問題,需要傳遞的參數為:1、是up(上箭頭)還是down(下箭頭),2、選擇記錄的id,3、選擇記錄的order。

 <a href="?order=up&id=<%# Eval("ID") %>&type=<%# Eval("OrderNum ") %>">↑</a>
|
<a href="?order=down&id=<%# Eval("ID") %>&type=<%# Eval("OrderNum ") %>">↓</a>

存儲過程為
 

CREATE PROCEDURE NewsSortOrder @order char(20),@id int,@type int AS
declare @nowid int    --搜索上一條或下一條的ID
if @order = "up"    --上升
begin
    set @nowid = (select Top 1 ID From Sorts Where OrderNum >= @type And ID<>@id Order By OrderNum ASC )
    if isnumeric(@nowid) = 1    --假如為數字的話
    begin
        if (Select OrderNum  From Sorts Where ID = @nowid) = @type        --假如兩記錄type相同的情況
        begin
            Update Sorts Set OrderNum = OrderNum + 1 Where ID = @id Or OrderNum > @type    --該記錄type+1並且他的上面的記錄除了上一條type全部加一
        end
        else
        begin     --開始調換
            Update Sorts Set OrderNum = (Select OrderNum  From Sorts Where ID = @nowid) Where ID = @id
            Update Sorts Set OrderNum  = @type Where ID = @nowid
        end
     end
end
if @order = "down"    --下降
begin
    set @nowid = (select Top 1 ID From Sorts Where OrderNum  <= @type And ID <>@id Order By OrderNum  Desc)
    if isnumeric(@nowid) = 1    --如果為數字
    begin
        if (Select OrderNum  From Sorts Where ID = @nowid) = @type        --假設兩記錄type相同
        begin
            Update Sorts Set OrderNum  = OrderNum  - 1 Where ID = @id Or OrderNum  < @type    --該記錄type-1並且他的下面的記錄除了下一條type全部減一
        end
        else
        begin    --開始調換
            Update Sorts Set OrderNum  = (Select OrderNum  From Sorts Where ID = @nowid) Where ID = @id
            Update Sorts Set OrderNum  = @type Where ID = @nowid
        end
     end
end
GO

以上是.Net2.0 + SqlServer 2000 調試

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved