1

如果我有一个数据库字段列表:

id    order    title
1     3        This is a post
2     1        This is another post
3     2        This is also a post
4     4        This is still a post

我想根据 order 更改这些的顺序
如果我将 id #1 上的订单设置为 2,我希望将 id #3 上的订单设置为 3。
如果我将 id #4 上的订单设置为 1,我希望 id #1 上的订单为 4,将 id #2 上的订单设置为为 2,id #3 上的订单为 3 等等。

我怎样才能做到这一点?我认为这应该很简单,但我无法弄清楚。
我已经搜索了,但我不知道要搜索什么...

4

3 回答 3

3

您可以在 SQL 中使用两个UPDATE语句来执行此操作:

START TRANSACTION;
SELECT order FROM t WHERE order BETWEEN $new_order AND $old_order FOR UPDATE;

UPDATE t SET order = order + 1  WHERE order BETWEEN $new_order AND $old_order;
UPDATE t SET order = $new_order WHERE id = $id;

COMMIT;

我在这些更新期间锁定了表以防止并发问题(但是,请注意事务/锁仅适用于 InnoDB 表)。

于 2012-04-30T07:46:24.263 回答
1

首先,您必须找到$other_row具有order您想要重用的价值的 。然后更改每一行的值。

$id_to_set = 1;
$order_to_set = 2;

// Find the order that will need to be swapped
$result = mysql_query("select order from xxx where id = $id_to_set");
$row = mysql_fetch_row($result);
// Find the other row that will be modified
$result = mysql_query("select id from xxx where order = $order_to_set");
$other_row = mysql_fetch_row($result);

// Do the actual swapping
mysql_query("update xxxx set order = $order_to_set where id = $id_to_set");
mysql_query("update xxxx set order = " . $row['order'] . " where id = " . $other_row['id']);
于 2012-04-30T07:42:27.910 回答
0

有两种方法:阅读 SQL 文档并在查询中使用 ORDER BY close

阅读 PHP 文档并使用 usort 函数

于 2012-04-30T07:23:24.777 回答