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 (???) ?
Есть дерево, колонки 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 (???) ?