MySQL记录订购

时间:2010-09-06 18:08:12

标签: php mysql

在我目前的一个项目中,我有一个下拉(选择)表单元素。我使用数组(PHP)填充选项:

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

(数组键=选项值,数组值=选项文本)

现在,这为我提供了按照自己的意愿重新订购选项的便利。

现在的问题是我的客户希望能够从管理界面添加/修改/重新订购选项。这意味着我现在需要将这些选项放入数据库表中。

这也意味着没有简单的方法(我不知道)将记录放入自定义顺序。

假设我创建了一个包含'sort_order'字段的区域表。有没有人知道任何允许客户使用简单的向上/向下按钮从界面重新订购记录的解决方案?

4 个答案:

答案 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列。