Der Versuch, einige hierarchische Daten zu sammeln, um sie an Dritte zu senden, und wurde an this post gerichtet.Gespeicherte Prozedur Zeitüberschreitung
Nach dem Versuch, es zu meinem Anwendungsfall auf zwicken, hält die gespeicherte Prozedur Zeitlimit.
Also habe ich es zweimal lokal versucht (via PhpMyAdmin).
Wenn ich versuche, PMA im Browser nach dem Aufruf der gespeicherten Prozedur neu zu laden, bekomme ich nur ein ewiges "Warten auf Antwort" Spinner (mehr als 10 oder 20 Minuten).
Ich nehme an, dass etwas mit meinem SP-Code nicht stimmt ???
CREATE TABLE foo
(`id` int, `name` varchar(100), `parentId` int, `path` varchar(100))
//
INSERT INTO foo (`id`, `name`, `parentId`, `path`)
VALUES (1, 'discrete', 0, NULL),
(2, 'res', 1, NULL),
(3, 'smt', 2, NULL),
(4, 'cap', 1, NULL),
(5, 'ind', 1, NULL),
(6, 'smt', 4, NULL),
(7, 'tant', 6, NULL),
(8, 'cer', 6, NULL)
//
CREATE PROCEDURE updatePath()
BEGIN
DECLARE cnt, n int;
SELECT COUNT(*) INTO n FROM foo WHERE parentId = 0;
UPDATE foo a, foo b SET a.path = b.name WHERE b.parentId IS NULL AND a.parentId = b.id;
SELECT count(*) INTO cnt FROM foo WHERE path IS NULL;
while cnt > n do
UPDATE foo a, foo b SET a.path = concat(b.path, '|', b.id) WHERE b.path IS NOT NULL AND a.parentId = b.id;
SELECT count(*) INTO cnt FROM foo WHERE path IS NULL;
end while;
END//
EDIT
Erwartete Ergebnisse:
VALUES (1, 'discrete', 0, '1'),
(2, 'res', 1, '1|2'),
(3, 'smt', 2, '1|2|3'),
(4, 'cap', 1, '1|4'),
(5, 'ind', 1, '1|5'),
(6, 'smt', 4, '1|4|6'),
(7, 'tant', 6, '1|4|6|7'),
(8, 'cer', 6, '1|4|6|8');
In Bezug auf das Aufrufen von SPs in SqlFiddle, ist mein Verständnis, dass sie aus dem Schemabereich aufgerufen werden sollten. Wenn ich das falsch verstanden habe, rate bitte. – mOrloff
Und BTW, ich bin offen für völlig andere Ansätze (wie temporäre Tabellen oder ???), wenn es Vorteile gibt, dies zu tun. – mOrloff