Есть база, структура: id | parentid | level | name | desc | ... Здесь level - уровень "вложенности" элемента ([0-4]), parentid - id родительского эл-та. Например: Код (Text): id |par|lvl| name | -------------------------- 1 | 0 | 1 | ПВХ Системы | ... 2 | 1 | 2 | TM Wintech | ... 3 | 1 | 2 | TM Aluplast | ... 4 | 2 | 3 | О компании Wintech | ... 5 | 2 | 3 | Каталог Wintech | ... 6 | 3 | 3 | Каталог Aluplast | ... 7 | 10 | 3 | запись с id==10 отсутствует | ... 8 | 12 | 2 | запись с id==12 отсутствует | ... Выводится как ПВХ Системы - TM Wintech - О компании ... - Каталог ... - TM Aluplast - Каталог ... (записи № 7 и 8 никуда не выводятся) Можно ли как-то одним запросом выбрать все записи, для которых не существует записи с id == (текущему) parentid? Т.е. в примере - записи № 7 и 8 "Делай перебор всей базы в цикле" предлагать только в случае, если одним-двумя запросами никак не обойтись (Это я тогда сам сделаю)
Код (Text): SELECT a.id FROM table AS a LEFT JOIN table AS b ON a.parentid=b.id WHERE b.id IS NULL оно?
simpson, не-а. Не совсем :\ Немного поправил: Код (Text): SELECT a.* FROM proddb AS a LEFT JOIN proddb AS b ON a.parentid=b.id WHERE b.id IS NULL AND a.level != 1 (добавил level != 1, т.к. у записей 1го уровня parentid=0) Но все равно, выводятся только записи с parentid == 0. ... А вот если у меня в базе есть такие записи: Код (Text): id |par|lvl| name | -------------------------- 13 | 99 | 2 | 2й уровень, id 99 не существует | ... 14 | 13 | 3 | 3rd level, id 13 exists | ... 15 | 14 | 3 | 4th level, id 14 exists | ... Записи № 14 и 15 ссылаются на существующую запись №13. А вот 13я - на несуществующую №99 И в результате надо удалить и 13ю, и 14ю, и 15ю Тут без цикла/перебора уже не обойтись?
simpson, ай!-) протупил я, Ваш запрос - то что надо! Сенкью, так сказать, ВЭРИ мач Обещаю в следующий раз _сначала_ внимательно думать, а потом уже писать на форум.