удаление дерева альбомов - PullRequest
       6

удаление дерева альбомов

0 голосов
/ 01 февраля 2010

у меня есть следующая таблица

album_id    |    sub_album_id    |     name
sdf2342     |    0               |   family
a2243d      |    sdf2342         |   wife
23ods       |    sdf2342         |   jack
23jskd      |    0               |   places

Я хочу удалить выбранный альбом со всем его под_альбомом, и если есть еще под_альбом, то удалите и их тоже ... так что даже под_альбом может иметь под_альбом .. точно так же, как в виде дерева папок .. ограничений нет.

как мне удалить все вложенные альбомы альбома с выбранным альбомом ... выполнив один запрос.

Ответы [ 2 ]

1 голос
/ 02 февраля 2010

Если вы хотите рекурсивно удалять строки из иерархии, здесь есть хороший фон:

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

0 голосов
/ 01 февраля 2010
Delete from myTable 
where sub_album_id = 'sdf2342'
OR album_id = 'sdf2342'

РЕДАКТИРОВАТЬ 2/2/10: Я неправильно понял неограниченную иерархию,
Попробуйте это тогда:

MyLoop: LOOP
    DELETE FROM MyTable
    WHERE album_ID = 'sdf2342';

    IF SELECT count(*) where sub_album_id not in (select album_ID from MyTable) = 0 THEN LEAVE MyLoop END IF

    DELETE FROM MyTable WHERE sub_album_id not in (select album_ID from MyTable)

END LOOP MyLoop

Мой синтаксис может быть немного неправильным, потому что я пытаюсь адаптировать язык сценариев для отдельного SQL, так что вам, возможно, придется его работать. И это может взорвать ваш процессор на большой таблице, если он не проиндексирован должным образом (как минимум, нужен индекс для sub_album_id и album_id)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...