SQL在删除一行数据后对数据库进行排序


SQL sort database after delete a row data

我看了很多例子,但仍然有一些问题。我希望能够在删除一行之后对SQL表进行排序。

我想做的事:

sid type 
1   1
1   2
1   3
2   1
2   2
3   1
3   2
3   3
3   4
4   1
4   2

假设我删除了类型2-sid 3,它将从中排序

sid type 
1   1
1   2
1   3
2   1
2   2
3   1
3   3
3   4
4   1
4   2

sid type 
1   1
1   2
1   3
2   1
2   2
3   1
3   2
3   3
4   1
4   2

我的SQL结构:

$deleteData = $con->prepare("DELETE FROM target WHERE sid=? AND type=?");
$deleteData->bind_param("ii", $sid, $type); 
$sid= $_POST['sid'];
$type= $_POST['type'];
$deleteData -> execute(); 
$updateData = $con->prepare("UPDATE 
`                               target
                            SET 
                                type = type - 1 
                            WHERE 
                                sid = $sid AND type > $type");
$updateData -> execute(); 

老实说,我不确定我在updateData部分做了什么。如何设置它以便重新排序?

第二个查询不起作用是因为参数绑定不正确。

你应该有

$updateData = $con->prepare("UPDATE 
                               target
                            SET 
                                type = type - 1 
                            WHERE 
                                sid = > ? AND type > ?");
$updateData->bind_param("ii", $sid, $type); 

在db中,您的查询工作正常,正如您在fiddle中看到的那样。

Sql Fiddle演示

CREATE TABLE target
    (`sid` int, `type` int)
;
INSERT INTO target
    (`sid`, `type`)
VALUES
    (1, 1),
    (1, 2),
    (1, 3),
    (2, 1),
    (2, 2),
    (3, 1),
    (3, 2),
    (3, 3),
    (3, 4),
    (4, 1),
    (4, 2)
;
DELETE FROM target WHERE sid=3 AND type=2;
UPDATE  target
SET 
    type = type - 1 
WHERE 
    sid = 3 AND type > 2 ;

SELECT *
FROM target;