首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改列表的顺序?

如何更改列表的顺序?
EN

Stack Overflow用户
提问于 2013-03-24 20:08:46
回答 3查看 2.1K关注 0票数 0

我使用的是PHP/MySQL,但实际上只是寻找伪代码

如何允许用户更改项目列表的显示顺序?

假设用户将#4移动到#1,我是否将#4更改为#0,然后每行(1-3)将其增加1,因此它是2-4,然后将#0更改为#1?

这是最好的方法吗?

更新:这是一个待办事项列表,我不会只是交换项目的顺序(例如,交换#1和#4,但将在其他项目前面移动项目)

我在一个包含item_id、task、completed、order_id的SQL db中包含了这些项。

我需要改变的是order_id

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-24 21:19:56

我想你已经说对了:

代码语言:javascript
复制
UPDATE items SET order_id = 0 WHERE order_id = 4;
UPDATE items SET order_id = order_id + 1 WHERE  order_id >= 1 AND order_id < 4;
UPDATE items SET order_id = 1 WHERE order_id = 0;

要使用order_id i将项目向上移动到位置j (i > j):

代码语言:javascript
复制
UPDATE items SET order_id = 0 WHERE order_id = i;
UPDATE items SET order_id = order_id + 1 WHERE  order_id >= j AND order_id < i;
UPDATE items SET order_id = j WHERE order_id = 0;

要使用order_id i将项目向下移动到位置j (j > i):

代码语言:javascript
复制
UPDATE items SET order_id = 0 WHERE order_id = i;
UPDATE items SET order_id = order_id - 1 WHERE  order_id > i AND order_id <= j;
UPDATE items SET order_id = j WHERE order_id = 0;

另一种选择是添加一个previous_sibling。假设您已经加载了列表,因此您知道前面的兄弟是[1 => null, 2 => 1, 3 => 2, 4 => 3, 5 => 4]

代码语言:javascript
复制
UPDATE items SET previous_sibling = 3 WHERE id = 5; #previous_sibling of 4
UPDATE items SET previous_sibling = null WHERE id = 4; # previous_sibling of 1
UPDATE items SET previous_sibling = 4 WHERE id = 1;
票数 3
EN

Stack Overflow用户

发布于 2013-03-24 20:22:10

我发现,如果可行的话,通常最好使用javascript (即jquery)进行排序,因为它可以避免每次用户想要使用时都要访问后端。

但是,如果你想用php来做这件事,我建议你去看看array_push,array_pop等等。他们可以完成你想要做的事情。有关示例,请参阅http://www.php.net/manual/en/function.array-push.php#56479

票数 0
EN

Stack Overflow用户

发布于 2013-03-24 22:09:03

假设您想要将id为$task_id的任务设置为$order_id

代码语言:javascript
复制
UPDATE `table`
   SET order_id = order_id + 1
 WHERE order_id > $order_id;

UPDATE `table`
   SET order_id = $order_id
 WHERE task_id  = $task_id;

为了确保订单ids始终是连续的,没有间隔:

代码语言:javascript
复制
  SELECT @numrow := 0;

  UPDATE `table`
     SET order_id = @numrow := @numrow + 1;
ORDER BY order_id ASC;

这将对所有订单ids进行重新编号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15598265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档