下面的代码工作正常,但我想知道是否有其他方法来处理这个问题。基本上,删除条目后,我需要更新排序顺序。
$sql = 'DELETE FROM `ee_blog_category` WHERE id = '.$category_id;
mysqli_query($con,$sql);
if(mysqli_error($con)){
echo mysqli_error($con);
}
// update cat sort
$i = 1;
$sql = 'SELECT * FROM `ee_blog_category` ORDER BY `sort`';
$result = mysqli_query($con,$sql);
while ($row = mysqli_fetch_array($result)){
$sql1 = 'UPDATE `ee_blog_category` SET `sort` = '.$i.' WHERE `id` = '.$row['id'];
mysqli_query($con,$sql1);
$i++;
}
答案 0 :(得分:1)
是的,有一种不同的(我认为更好的)方式:
sort=sort-1
在你的情况下,这将是:
$sql = "Select sort from ee_blog_category where id=$category_id";
// execute, fetch, catch errors...
$sort_original = $row['sort'];
// now update all the others
$sql = "UPDATE ee_blog_category SET sort=sort-1 where sort > $sort_original"; // maybe add a filter here (by group f.e.)
// execute, check for errors.
注意:强>
您可以对sql-injection开放
更好地使用准备好的陈述!
答案 1 :(得分:0)
使用变量并将其放在一个语句中:
SET @s := 0;
UPDATE `ee_blog_category`
SET `sort` = (@s := @s + 1)
ORDER BY sort;
在实践中,您只需要为大于删除的ID执行此操作。如果您只删除一行:
UPDATE ee_bloc_cateory
SET sort = sort - 1
WHERE sort >= (SELECT MIN(sort) FROM ee_bloc_cateory WHERE id = $deleted_id);
您可以在删除之前查询$deleted_id
甚至$deleted_sort
。