在我目前的一个项目中,我有一个下拉(选择)表单元素。我使用数组(PHP)填充选项:
$regions=array(
1=>'North West',
2=>'North East',
3=>'South West',
4=>'South East',
);
(数组键=选项值,数组值=选项文本)
现在,这为我提供了按照自己的意愿重新订购选项的便利。
现在的问题是我的客户希望能够从管理界面添加/修改/重新订购选项。这意味着我现在需要将这些选项放入数据库表中。
这也意味着没有简单的方法(我不知道)将记录放入自定义顺序。
假设我创建了一个包含'sort_order'字段的区域表。有没有人知道任何允许客户使用简单的向上/向下按钮从界面重新订购记录的解决方案?
答案 0 :(得分:1)
对不起 - 没有。
您使用sort_order
列...
有些人可能会建议使用像10s这样的间隔 - IE:10,20,30 ......所以你可以在它们之间插入。但在某些时候,该计划必须正确地重新排序......
“焦土”方法是删除现有行,并根据UI中新排插行的顺序指定排序顺序。
答案 1 :(得分: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只会根据用户排列的顺序更新sortorder列。
答案 2 :(得分:1)
在关系数据库中表示排序的唯一方法是指定一个定义顺序的字段,如您在sort_order
字段中所建议的那样。
在您的管理界面中,您可以使用向上/向下按钮触发JavaScript函数(假设Web应用程序),该函数将遍历新排序的区域并为每个区域分配递增整数。可以将此整数分配给每个区域的隐藏字段,并在保存更改时使用完整表单数据发布。
发布表单后,您只需在数据库中插入/更新记录,并在客户端计算sort_order
字段。
从数据库获取有序的结果集通常非常简单:
SELECT * FROM your_table ORDER BY sort_order;
答案 3 :(得分:0)
只有四个选项,我会使用HTML列表框来显示这四个项目,以及一个允许重新排序的上/下按钮。可以找到一个例子here。
重新排序项目时,更新隐藏字段的值以保存当前订单。
提交表单后,在服务器上解析隐藏字段的值并更新每个项目的sort_order
列。