前
id | cat_id | order
33 | 1 | 1
34 | 1 | 2
后
id | cat_id | order
33 | 1 | 2
34 | 1 | 1
现在使用 4 查询
$db 是包装 $mysqli 用于使用占位符和注入防御
通过 id 获取第一条记录
$curr = $db->q('SELECT id,order,cat_id FROM `tbl` WHERE id`=? FOR UPDATE',
33)->fetch_assoc();
如果存在第一条记录按订单字段查找下一条记录
if($curr){
$next = $db->q('SELECT id,order FROM `tbl` WHERE `cat_id`=? AND
`order`>? ORDER BY `order` LIMIT 1 FOR UPDATE',
$curr['cat_id'],$curr['order']));
如果存在第一个和第二个 recorn 更改订单值
if($prev['id']){
$db->q("UPDATE `tbl` SET `order`=? WHERE `id`=?",$next['order'],$curr['id']);
$db->q("UPDATE `tbl` SET `order`=? WHERE `id`=?",$curr['order'],$next['id']);
}
}
重要的!检查存在两条记录,锁定行以进行更新