我看了很多例子,但仍然有一些问题。我希望能够在删除一行之后对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;