前
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']));
存在する場合、最初と 2 番目の 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']);
}
}
重要!存在する 2 つのレコードをチェックし、更新のために行をロックします