删除行数据后的SQL排序数据库

时间:2015-11-16 14:40:08

标签: php sql

我查看了很多例子,但我仍然遇到了一些问题。 我希望能够在删除行后对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部分做了什么。如何设置它以便重新排序?

1 个答案:

答案 0 :(得分:0)

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

你应该

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

在db中,您可以在小提琴中看到正确的查询。

<强> Sql Fiddle Demo

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;