2010-09-06 152 views
0

在我當前的一個項目中,我有一個下拉(選擇)表單元素。我填充使用數組(PHP)的選項:MySQL記錄訂購

$regions=array(
    1=>'North West', 
    2=>'North East', 
    3=>'South West', 
    4=>'South East', 
); 

(數組鍵=選項值,數組值=選項文本)

現在,這爲我提供了能夠重新排序的選項方便如我所願。

問題是現在我的客戶希望能夠從一個管理界面添加/修改/重新排序選項。這意味着我現在需要將這些選項放入數據庫表中。

什麼也意味着,有沒有簡單的方法(不,我所知道的)將記錄在一個自定義的順序。

假設我創建了一個包含'sort_order'字段的區域表。是否有人知道任何解決方案,允許客戶使用簡單的向上/向下按鈕重新排序界面中的記錄?

回答

1

代表在關係數據庫中的排序的唯一方法是通過指定定義的順序,當你與sort_order場建議的字段。

在你的管理界面,你可以有你的上/下按鈕觸發JavaScript函數(假設Web應用程序),這將通過新近有序的區域進行迭代,並分配一個遞增的整數各去一次。可以將此整數分配給每個區域的隱藏字段,並在保存更改時發佈完整表單數據。

在發佈的形式,你可以簡單地插入/更新記錄在數據庫中,與sort_order領域,因爲它是在客戶端計算。

獲得一個有序的結果從數據庫中設置通常很簡單:

SELECT * FROM your_table ORDER BY sort_order; 
+0

我對排序順序字段的實際更新感到滿意,但我想知道是否有任何「現貨供應」的解決方案提供GUI來上下移動記錄並確定排序順序值。 jQuery的基礎可能嗎? – GSTAR 2010-09-06 18:20:48

+2

我會看jQuery的排序。我認爲這些例子有這種確切的情況。 – sberry 2010-09-06 18:31:10

+1

@GSTAR:是的,正如@Sberry2A建議的那樣,您可能要查看http://jqueryui.com/demos/sortable/。你可以聽'change'事件來計算每個項目的順序值。否則,您可以在提交表單之前計算一次訂單頭寸。 – 2010-09-06 18:40:06

1

對不起 - 沒有。
您即將使用sort_order柱正確...

有些人可能會建議使用間隔10秒一樣 - IE:10,20,30 ...所以你可以插入之間英寸但在某些時候,該方案將不得不重新排序......

「焦土」方法是刪除現有的行,並根據UI中爲新插入的順序分配排序順序行。

1

您需要將該自定義訂單與用戶指定的排序順序一起存儲在表中。

create table regions { 
    id int primary key, 
    name varchar(255) not null, 
    sortorder int not null 
}; 

要獲得排序順序你做的值select id,name from regions order by sortorder 如果你想顯示的順序是東北,東南,西北,西南的表將包含:

id name   sortorder 
1  North West 3 
2  North East 1 
3  South West 4 
4  South East 2 

你GUI只是根據用戶安排它們的順序更新排序順序列。

0

只有四個選項,我會用一個HTML列表框中顯示的四個項目,以向上/向下按鈕沿允許他們重新排序。這個例子可以在here找到。

當項目重新排序時,更新隱藏字段的值以保存當前訂單。

當提交表單時,在服務器上解析隱藏字段的值並更新每個項目的sort_order列。