Дерево id -> parent_id. Каким образом изменить все записи для 1-го родителя.

Royal Flash

-=MaestrO=-
Дерево id -> parent_id. Каким образом изменить все записи для 1-го родителя.

Есть дерево, колонки id, parent_id, name, status. Максимальный уровень вложенности, например, 4. Каким образом возможно изменить все колонки status для одного родителя в 1 запрос?
UPDATE table SET status = 2 WHERE id = 5 AND id = 7 AND id = 8 ... выглядит плохо, так как для начала необходимо узнать все id (1 запрос), а потом изменить status для каждого id (1 и более SQL запросов)...
Может быть возможно использовать нечто наподобии вложенной выборки?

Запрос выборки выглядит так:
SELECT IF(t00.id IS NOT NULL, 1, 0) + IF(t01.id IS NOT NULL, 1, 0) + IF(t02.id IS NOT NULL, 1, 0) AS level
t0.id AS "0.id", t1.id AS "1.id", t2.id AS "2.id"
FROM table AS t0 LEFT JOIN table AS t1 ON (t1.parent_id = t0.id) LEFT JOIN table AS t2 ON (t2.parent_id = t1.id)
WHERE t0.parent = 5
Как к этому запросу приклеить UPDATE table SET status = 2 WHERE (???) ?
 

Royal Flash

-=MaestrO=-
SelenIT
Есть 2: 4.1xxx и 5xxx Хотя лучше, под 4.1, чтобы работало...

Есть ли в нете материалы на русском, чем отличается 5 версия от 4.1 ? Или принципиальных отличий нет? Нашел только одно: в 5-ой версии столбец уже нельзя назвать именем "exit"...
 

SelenIT

IT-лунатик :)
Начиная с 4.1 поддерживаются подзапросы. По идее, что-то вроде такого: ... WHERE id IN (запрос на выборку id-ов).

AFAIK, главное принципиальное отличие "пятерки" от "четверки" - поддержка хранимых процедур, триггеров и т.п.
 

Royal Flash

-=MaestrO=-
SelenIT
Попробуем :)

-~{}~ 25.07.06 04:16:

Конструкция UPDATE t1 ..... WHERE id IN (SELECT t1 ...) принципиально не работает, так как нельзя одновременно читать и изменять одну и ту-же таблицу...
 
Сверху