如果我有一个数据库字段列表:
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
我想根据订单更改这些订单的顺序 如果我在id#1到2上设置顺序,我希望id#3上的顺序设置为3 如果我将id#4上的顺序设置为1,我希望id#1上的顺序为4,id#2上的顺序为2,id#3上的顺序为3等等。
我该怎么做?我认为应该很简单,但我无法弄清楚 我搜索过但我不知道该搜索什么......
答案 0 :(得分:3)
您可以使用两个UPDATE
语句在SQL中执行此操作:
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表)。
答案 1 :(得分: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']);
。然后改变每一行的值。
{{1}}
答案 2 :(得分:0)
有两种方法: 阅读SQL文档并在查询中使用ORDER BY关闭
阅读PHP文档并使用usort函数