У меня есть стандартный иерархический идентификатор таблицы / PID, и мне нужно найти (boolean), если какой-либо дочерний элемент принадлежит к некоторому ID. Есть ли способ сделать это в mysql?
ID PID ------------ 1 0 <- root ... ... ... ... ... ... 7 1 ... ... 16 1 ... ... 4 0 ... ... 22 16 25 16
Есть ли способ узнать, принадлежит ли дочернему узлу 22 узлу 1? Я спрашиваю, потому что я хочу реализовать некоторую процедуру удаления, где узел 1 является моим Recycle. Все удаления, принадлежащие 1, будут удалены навсегда, и все остальные удаления будут заменены PID, поэтому временно принадлежит 1.
Большое спасибо заранее,
На основе Иерархических запросов в MySQL :
SET @x := 22; SET @y := 0; select 'yes' as x_comes_from_y from dual where @y in ( SELECT @id := ( SELECT pid FROM h WHERE id = @id ) AS nodes FROM ( SELECT @id := @x ) vars STRAIGHT_JOIN h WHERE @id IS NOT NULL );
Попробуй это.
Еще раз спасибо за это полезное решение. Я немного упростил, так как мне не нужен STRAIGHT_JOIN
SET @x := 52; SET @y := 41; select 'yes' as x_comes_from_y from dual where @y in ( SELECT @id := ( SELECT pid FROM cat WHERE id = @id ) FROM cat WHERE @id IS NOT NULL );
PS. Существует небольшой недостаток при использовании для получения полного пути объектов, результат всегда возвращает последнюю строку NULL, но этого можно избежать с помощью другого SELECT.