Ich versuche, eine Funktion zu machen, die rekursiv einen Pfad für eine bestimmte Kategorierekursive gespeicherte Funktionen in MySQL
CREATE FUNCTION getPath(inId INT)
RETURNS TEXT
DETERMINISTIC
BEGIN
DECLARE return_path TEXT;
DECLARE return_parent_id INT;
SELECT CONCAT('/', name) INTO return_path FROM article_categories WHERE id = inId;
SELECT parent_id INTO return_parent_id FROM article_categories WHERE id = inId;
IF return_parent_id > 0 THEN
SELECT CONCAT(getPath(return_parent_id), return_path) INTO return_path;
END IF;
RETURN return_path;
END
Wenn ich mit einer Kategorie versuchen zu laufen diese Funktion erstellt, die keine Eltern mehr hat (parent_id = 0) Es funktioniert gut, aber wenn ich eine Kategorie versuche, die eine Parent_id> 0 hat, bekomme ich 1424 Recursive gespeicherte Funktionen und Trigger sind nicht erlaubt.
Wie kann ich das umgehen? Ich werde diesen Code auf einem regulären Webhosting-Dienst hosten, der mindestens MySQL Server Version 5.1 haben sollte.
Nach etwas Hilfe von Ike Walker Ich habe eine precedure stattdessen gemacht, die
DROP PROCEDURE IF EXISTS getPath;
DELIMITER //
CREATE PROCEDURE getPath(IN category_id INT UNSIGNED, OUT return_path TEXT)
BEGIN
DECLARE parent_id INT UNSIGNED;
DECLARE path_result TEXT;
SET max_sp_recursion_depth=50;
SELECT CONCAT('/', ac.name), ac.parent_id INTO return_path, parent_id FROM article_categories AS ac WHERE ac.id = category_id;
IF parent_id > 0 THEN
CALL getPath(parent_id, path_result);
SELECT CONCAT(path_result, return_path) INTO return_path;
END IF;
END //
DELIMITER ;
funktioniert gut ich dann so etwas wie diese verwenden es zu nennen
CALL getPath(72, @temp); SELECT @temp;
Momentan entwickle ich auf Ubuntu mit MySQL-Server Version: 5.1.41-3ubuntu12.6 (Ubuntu) – Tirithen
Ich habe http: // Foren gefunden .mysql.com/read.php? 98,224107,224638 # msg-224638 das über SET spricht max_sp_recursion_depth = N; Wobei N die Anzahl der zu erlaubenden Rekursionen ist. Aber ich bekomme immer noch 1424 Recursive gespeicherte Funktionen und Trigger sind nicht erlaubt. – Tirithen