我在一棵树中有几个元素(Jquery Nested Sortable)。在这棵树中有两种可能的类型。当我将一个节点拖到另一个具有不同类型的节点时,我想将该项目及其子项更新为其新的父项。我让它与一些 php 代码一起工作,但我不想执行太多的 sql 更新。所以我决定让数据库来做它的工作。
我正在尝试在 sql 中重复更新功能。但我无法让它工作。我希望有一个人可以帮助我:
REPEAT
UPDATE elements a, elements b
SET a.type=b.type
WHERE a.parent_id=b.id
AND a.type<>b.type
AND a.parent_id<>0
UNTIL ROW_COUNT()=0
END REPEAT;
更新语句就像一个魅力,但只有一次。我希望查询一次又一次地运行,直到找不到更改(row_count)。
--- 更新:对 WojtusJ 评论的反应我在 PhpMyAdmin 的 SQL 窗口中尝试了以下操作:
DROP PROCEDURE IF EXISTS UpdateElements()
CREATE PROCEDURE UpdateElements();
BEGIN
DECLARE cnt;
REPEAT
SELECT count(*) AS cnt INTO @cnt
FROM elements AS a
JOIN elements AS b
ON (a.parent_id=b.id AND a.type<>b.type AND a.parent_id<>0);
UPDATE elements a, elements b
SET a.type=b.type
WHERE a.parent_id=b.id
AND a.type<>b.type
AND a.parent_id<>0;
UNTIL @cnt=0 END REPEAT;
END
CALL UpdateElements()