За последние 24 часа нас посетили 18143 программиста и 1659 роботов. Сейчас ищут 1394 программиста ...

Рекурсивные (или вложенные) запросы.

Тема в разделе "PHP и базы данных", создана пользователем Ігор, 15 янв 2009.

  1. Ігор

    Ігор Активный пользователь

    С нами с:
    7 апр 2008
    Сообщения:
    195
    Симпатии:
    0
    Есть таблица sqlite (для галлереи)
    [sql]id integer primary key,
    parent TEXT,
    path TEXT,
    name TEXT,
    .......[/sql]
    в parent храниться id галлереи "родителя" или "0" если эта галлерея корневого(верхнего) уровня.

    Скажите, как по id галлереи получить полный путь к ней (с именем всех "верхних" галлерей)
    Типа (Gallery/sub/subsubgellery)

    и обратно по пути Gallery/sub/subsubgellery полную инфу о галлереи, которую запросили.
     
  2. obsrv

    obsrv Активный пользователь

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
  3. Ігор

    Ігор Активный пользователь

    С нами с:
    7 апр 2008
    Сообщения:
    195
    Симпатии:
    0
    Почитал. Но как раз, то чно нужно не нашел. Получается, что я использую списки смежности

    Вот что придумал для вычисления id по полному пути.
    PHP:
    1.  <?php function getGallery()
    2. {
    3.    if ((isset($_REQUEST['gallery'])) && (!empty($_REQUEST['gallery'])))
    4.    {
    5.       $this->gallery= $_REQUEST['gallery'];
    6.    }
    7.    else
    8.    {
    9.       return '0' ;
    10.    }
    11.  
    12.   $l_gall=split('/',$_REQUEST['gallery']);
    13.   $parent='0';
    14.  
    15.   for ($r=0; $r<count($l_gall); $r++)
    16.  
    17.     {
    18.       $this->dbio->query("SELECT id from gallerys
    19.                    WHERE name='".$l_gall[$r]."' AND parent='$parent' LIMIT 1");
    20.  
    21.       $parent=$this->dbio->fetch_single();
    22.       if (empty($parent)) {
    23.  
    24.           $this->eTitle="Ошибка: Запрашиваемая галерея не найдена";
    25.           $this->eDescr="Галерея, которую вы запросили (<b>$l_gall</b>) не существует, или она скрыта администраторам сайта";
    26.           return false;
    27.       }
    28.     }
    29.  
    30.   return $parent;
    31.  
    32. } ?>
    Вроде работает, но мне не совсем нравиться....