如何 - 删除后sql更新排序顺序

时间:2016-12-06 19:25:07

标签: php mysql sql

下面的代码工作正常,但我想知道是否有其他方法来处理这个问题。基本上,删除条目后,我需要更新排序顺序。

$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++;
}

2 个答案:

答案 0 :(得分:1)

是的,有一种不同的(我认为更好的)方式:

  1. 获取已删除项目的排序值(当然,在删除之前)。
  2. 使用sort=sort-1
  3. 更新排序值较大的所有项目

    在你的情况下,这将是:

    $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