![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте,
Подскажите с запросом, есть таблица
CREATE TABLE category( category_id INT AUTO_INCREMENT PRIMARY KEY, category_name VARCHAR(20) NOT NULL, category_parent INT DEFAULT NULL); INSERT INTO category VALUES(1,'ELECTRONICS', родитель каталога(число), назовем $page_id ),(2,'TELEVISIONS',1),(3,'TUBE',2), (4,'LCD',2),(5,'PLASMA',2),(6,'PORTABLE ELECTRONICS',1), (7,'MP3 PLAYERS',6),(8,'FLASH',7), (9,'CD PLAYERS',6),(10,'2 WAY RADIOS',6);
Необходимо выстроить путь от ELECTRONICS до ( это значение переменно, может быть и LCD, и PLASMA и т.д)
Выстроить путь - это получить значения ELECTRONICS -> TELEVISIONS -> PLASMA
Допустим нам известно PLASMA, и $page_id. Неизвестен TELEVISIONS, его и надо получить
Узел TELEVISIONS является первым в иерархии, поскольку его родитель $page_id
Ухх
Не работает ((
$query = "CREATE PROCEDURE GET_PARENTS (category_id INTEGER) RETURNS (E_ID INTEGER, category_name CHAR(200)) AS declare variable P_ID integer; BEGIN select category_parent from ".TABLE_CATEGORY." where category_id = :category_id into :category_id; WHILE (category_id > 0) DO BEGIN SELECT C.category_id, C.category_parent, C.category_name FROM ".TABLE_CATEGORY." C WHERE category_id = :category_id INTO :E_ID, :P_ID,:category_name; category_id=P_ID; SUSPEND; END END ^ ";
Код после сборки такой
CREATE PROCEDURE GET_PARENTS (category_id INTEGER) RETURNS (E_ID INTEGER, category_name CHAR(200)) AS declare variable P_ID integer; BEGIN select category_parent from category where category_id = :category_id into :category_id; WHILE (category_id > 0) DO BEGIN SELECT C.category_id, C.category_parent, C.category_name FROM category C WHERE category_id = :category_id INTO :E_ID, :P_ID,:category_name; category_id=P_ID; SUSPEND; END END ^
Отредактированно Артем125 (05.10.2009 19:14:25)
Неактивен
SELECT category_parent FROM category WHERE category_id = 5.
Но, думаю, Вы ищете таки не непосредственного родителя, а всех.
Попробуйте сделать через временные таблички — код процедуры нормальный,
но выбирать лучше не в переменные, а в строки временной таблицы:
CREATE TEMPORARY TABLE get_parent_temp (id INT);
...
INSERT INTO get_parent_temp SELECT category_parent FROM category WHERE category_id = P_ID;
...
SELECT c.* FROM category c JOIN get_parent_temp p ON (c.category_id = p.id);
DROP TEMPORARY TABLE get_parent_temp
Неактивен
paulus написал:
SELECT category_parent FROM category WHERE category_id = 5.
Но, думаю, Вы ищете таки не непосредственного родителя, а всех.
Спасибо что откликнулись, я ищу непосредственного родителя этого узла, или ветку для данного узла...
Известен какой-нибудь узел, например PLASMA, известен и родитель узла ELECTRONICS, сам ELECTRONICS не известен и этих узлов много. Необходимо в обратном порядке от PLASMA, найти TELEVISIONS и ELECTRONICS
ELECTRONICS
TELEVISIONS
PLASMA
Отредактированно Артем125 (05.10.2009 20:38:04)
Неактивен
Дада, верхнее находит непосредственного родителя, нижнее — всех
Неактивен