В
mysql есть такое как хранимые процедуры и функции. Их можна хранить с привязкой к базе данных. Вызов таких может творить чудеса с данными.
Я когдато писал что-то подобное но отказался поскольку проблем с ними много на разных хостингах особенно бесплатных.
Вот например эта добавит узел в дерево NESTED SETS. {tabname} заменить на имя таблицы например.
CREATE FUNCTION {tabname}_insert(idparent INT, typeobj TINYINT, nameobj VARCHAR(255))
RETURNS int(11)
DETERMINISTIC
BEGIN
DECLARE lid INT DEFAULT 0;
DECLARE rid INT DEFAULT 0;
DECLARE lv_obj INT DEFAULT 0;
DECLARE sys_id INT DEFAULT 0;
DECLARE url_parent TEXT DEFAULT '';
DECLARE rez INT DEFAULT 0;
DECLARE url_close VARCHAR(255) DEFAULT '';
DECLARE lang_code VARCHAR(255) DEFAULT '';
DECLARE inc_php_parent VARCHAR(255) DEFAULT '';
DECLARE tpl_content_parent TEXT DEFAULT '';
DECLARE tpl_content_short_parent TEXT DEFAULT '';
SELECT id INTO sys_id FROM {tbp}{tabname} WHERE id = idparent;
IF sys_id != 0
THEN
SET sys_id = 0;
SELECT id INTO sys_id FROM {tbp}{tabname} WHERE obj_sef = nameobj AND id_parent = idparent;
IF sys_id = 0
THEN
SELECT lang_ISO_639_3_alpha INTO lang_code FROM al_location WHERE root = 1 AND status_cnf;
SELECT left_key, right_key, level_obj, url, tpl_content, tpl_content_short, inc_php INTO lid, rid, lv_obj, url_parent, tpl_content_parent, tpl_content_short_parent, inc_php_parent FROM {tbp}{tabname} WHERE id = idparent;
UPDATE {tbp}{tabname} SET left_key = left_key + 2 WHERE left_key > rid;
UPDATE {tbp}{tabname} SET right_key = right_key + 2 WHERE right_key >= rid;
IF typeobj THEN SET inc_php_parent = ''; END IF;
INSERT INTO {tbp}{tabname} SET level_obj = lv_obj + 1,
id_parent = idparent,
left_key = rid,
right_key = rid + 1,
obj_sef = nameobj,
obj_type = typeobj,
inc_php = inc_php_parent,
obj_name = nameobj,
advanced_content = tpl_content_parent,
short_content = tpl_content_short_parent,
tpl_content = tpl_content_parent,
tpl_content_short = tpl_content_short_parent,
sign_lang = lang_code,
url = CONCAT(url_parent,'/',nameobj,url_close);
SELECT LAST_INSERT_ID() INTO rez;
ELSE SET rez = 0; END IF;
ELSE SET rez = 0; END IF;
RETURN rez;
END
_____________
Ходить по воде и разрабатывать программы, следуя спецификации, очень просто… если они заморожены. (Edward V Berard).________