Как построить Древо(родитель сын) минимальными затратами

Тема в разделе "PHP", создана пользователем Joker84, 25 ноя 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Joker84

    Joker84 Постоялец

    Регистр.:
    8 авг 2007
    Сообщения:
    68
    Симпатии:
    2
    Добрый день, прошу вашей помощи в оптимизации построения древа!

    в БД таблица строемого древа



    id ! ИМЯ ! ID родителя


    cейчас я вывожу это извратом :
    Код:
    	SELECT a.* FROM таблица AS a WHERE id_parent='0'"
     обработка -> и вывод 
         foreach($rows_region as $row_region) {
            echо $row_region->name;
            select_tree_child($row_region->id,'antijob_region');
             // вывод детей
    	}
    ф-я выводв детей
    Код:
    function select_tree_child($id,$table)  // ф-я необходимая для вывода select подкатегорий.
    {   "SELECT a.* FROM  таблица AS a WHERE id_parent='{$id}'");
     foreach($rows as $row) {
    	   echo'    '.$row->name;
    		}
    }

    Таким образом получается очень много запросов. подскажи те пож-та как сделать это оптимально, за 1н-2 запроса
     
  2. a1ien.n3t

    a1ien.n3t Постоялец

    Регистр.:
    12 июл 2008
    Сообщения:
    52
    Симпатии:
    7
    Только если переделывать структуру базы.
    http://doc.prototypes.ru/database/nestedsets/theory/use/
     
  3. valconq

    valconq Создатель

    Регистр.:
    2 мар 2010
    Сообщения:
    10
    Симпатии:
    1
  4. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    По-нормальному ты этого не сделаешь.

    Nested Sets - еще тот геморрой. А если просто id и parent - то увы, селектов получится чуть ли не по количеству записей в базе.

    Единственный путь, который могу тебе предложить - заведи вместо parent path. Пусть у тебя там будет varchar типа "1-3-121-12" - просто указаны id всех родителей до самого корневого. И запросы тогда будут в стиле WHERE path LIKE "1-3-%" и в таком духе. Там тогда много можно будет выгребать средствами самого мускула.
     
  5. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Nested Sets, в принципе, хорошо себя показывают, но только на статических или редкоизменяемых данных.

    Для динамических данных задача (если нет сумасшедшей глубины) решается при помощи Adjacency List тыц
     
Статус темы:
Закрыта.