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