基于int的自定义字段排序

时间:2012-04-30 07:20:47

标签: php mysql

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

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等等。

我该怎么做?我认为应该很简单,但我无法弄清楚 我搜索过但我不知道该搜索什么......

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函数