2010-09-06 116 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列。