Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: данные из оракла в деревовидное меню
 
 автор: Тиль   (03.03.2006 в 08:05)   письмо автору
 
 

Ребята, задача сложная:
есть в Оракле таблица, нужно подконнектиться к базе, и выбрать из нее(из таблицы) все данные, да так чтобы они группировались и отражались на странице как деревовидное меню, например:
таблица:
Товары
Продовольственные| мясные| колбаса
Продовольственные| мясные| мясо
Продовольственные| мясные| курица
Продовольственные| спиртовые| водка
Продовольственные| спиртовые| вино

Должно отражаться примерно так:
Товары
Продовольственные
мясные

колбаса
мясо
курица
спиртовые
водка
вино

никто не подскажет как сделать?

   
 
 автор: cheops   (03.03.2006 в 14:14)   письмо автору
 
   для: Тиль   (03.03.2006 в 08:05)
 

Хм... а нет возможности нормализовать таблицу? В таблице три столбца или это это один столбец?

   
 
 автор: Trianon   (03.03.2006 в 14:37)   письмо автору
 
   для: cheops   (03.03.2006 в 14:14)
 

столбца-то три, похоже. А вот таблиц и в самом деле маловато..
Напрашивается что-то такое...
 Table 1:  parts                        Table 2:  goods


 part_id |part_pid | part_name          good_id | part_id | good_name
-------------------------------------- ------------------------------
  1      |  Null   | Товары               1     |    3    | колбаса  
  2      |    1    | Продовольственные    2     |    3    | мясо     
  3      |    2    | Мясные               3     |    3    | курица   
  4      |    2    | Спиртовые            5     |    4    | водка    
                                          6     |    4    | вино     

   
 
 автор: Тиль   (03.03.2006 в 14:58)   письмо автору
 
   для: Trianon   (03.03.2006 в 14:37)
 

да нет, там так....может как то группировать при создании меню?

   
 
 автор: Trianon   (03.03.2006 в 15:43)   письмо автору
 
   для: Тиль   (03.03.2006 в 14:58)
 

    $nm1 = "";
    while(($row=oci_fetch_array($res)) != 0)
    {
       $name1 = $row['name1'];
       $name2 = $row['name2'];
       $name3 = $row['name3'];
       if($name1 != $nm1)
       {
          $nm1 = $name1;
          $nm2 = "";
          echo "<b>$name1<br></b>";
       }
       if($name2 != $nm2)
       {
          $nm2 = $name2;
          $nm3 = "";
          echo "&nbsp;&nbsp;&nbsp;&nbsp;<b>$name2</b><br>";
       }
       if($name3 != $nm3)
       {
          $nm3 = $name3;
          $nm4 = "";
          echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$name3<br>";
       }
    }

Тьфу... всё можно. Да только вот, когда заставят Вас объединить хлеб и булку с бакалеей, а мясо разделить на свинину, говядину и человечину, Вам же придется всё писать по-новой.

   
 
 автор: XPraptor   (03.03.2006 в 15:46)   письмо автору
 
   для: Тиль   (03.03.2006 в 14:58)
 

Какой придумщик, млина придумал это? Тебе придется изрядно повозиться чтобы вывести на страницу, и при этом твой код обязательно будет в сто и более раз медленне, чем, если бы данные были в разных таблицах, или хотя бы в разных столбцах.

Принцип вывода такой:
Выбираешь записи из Товары и сортируешь их по полю с этим бредом по возрастанию.
Далее твои действия в цикле следующие:


unset($ar_razdel_1);
$ar_razdel_1[0]="";
$ar_razdel_1[1]="";
//$rez-это дескриптор, запроса на выборку
while($row=mysql_fetch_object($rez))
{
    unset($ar_razdels);
    //tovary - это название столбца
    $ar_razdels=explode("| ", $row->tovary);
    //если первый раздел другой то печатаем его на страницу
    if($ar_razdel_1[0] != $ar_razdels[0]){
        print $ar_razdels[0] . "<br>\n";
    }
    //если второй раздел другой то печатаем его на страницу
    if($ar_razdel_1[1] != $ar_razdels[1]){
        print $ar_razdels[1] . "<br>\n";
    }
    //третий раздел печатаем всегда, он всегда отличается (как я понял)
    print $ar_razdels[2] . "<br>\n";

    //присваиваем временным разделам текущие
    $ar_razdel_1[0]=$ar_razdels[0];
    $ar_razdel_1[1]=$ar_razdels[1];

}

   
 
 автор: Trianon   (03.03.2006 в 15:50)   письмо автору
 
   для: Тиль   (03.03.2006 в 14:58)
 

Так там действительно ОДИН столбец в таблице?

   
 
 автор: Тиль   (03.03.2006 в 15:55)   письмо автору
 
   для: Trianon   (03.03.2006 в 15:50)
 

нет, там много столбцов,я же в примере разделили знаком |, поэтому я про группировку и заговорил

   
 
 автор: XPraptor   (03.03.2006 в 16:01)   письмо автору
 
   для: Тиль   (03.03.2006 в 15:55)
 

Ну тогда более быстро работать будет. Мой код тебе опять же подходит, только массив теперь не нужно расщеплять explod-ом а сразу присваивать из полей названия разделов.

   
 
 автор: Тиль   (03.03.2006 в 16:17)   письмо автору
 
   для: XPraptor   (03.03.2006 в 16:01)
 

а можно подробнее? а линии дерева рисоваться будут?

   
 
 автор: XPraptor   (03.03.2006 в 16:28)   письмо автору
 
   для: Тиль   (03.03.2006 в 16:17)
 

Млина, за тебя может всю прогу написать? Ты что не сможешь сам в свой дизайн вывести надписи из базы?

   
 
 автор: Тиль   (03.03.2006 в 16:30)   письмо автору
 
   для: XPraptor   (03.03.2006 в 16:28)
 

просто пхп учу вторую неделю а надо уже сделать такое:))

   
 
 автор: XPraptor   (03.03.2006 в 16:34)   письмо автору
 
   для: Тиль   (03.03.2006 в 16:30)
 

А при чем PHP и HTML дизайн? Я тебе написал готовый код ыввода дерева, а как оно выглядит я не могу знать, это ты сам только можешь дописать html тэги в вывод print каждого раздела.
В моем коде print $ar_razdels[0] . "<br>\n"; это вывод главного раздела дерева и перевод строки после него,
print $ar_razdels[1] . "<br>\n"; это вывод второго уровня и перевод строки
print $ar_razdels[3] . "<br>\n"; это третий и последний уровень твоего рубрикатора. А как ты их раскрасишь (с линиями или еще как) это только тебе известно.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования