|
|
|
| Ребята, задача сложная:
есть в Оракле таблица, нужно подконнектиться к базе, и выбрать из нее(из таблицы) все данные, да так чтобы они группировались и отражались на странице как деревовидное меню, например:
таблица:
Товары
Продовольственные| мясные| колбаса
Продовольственные| мясные| мясо
Продовольственные| мясные| курица
Продовольственные| спиртовые| водка
Продовольственные| спиртовые| вино
Должно отражаться примерно так:
Товары
Продовольственные
мясные
колбаса
мясо
курица
спиртовые
водка
вино
никто не подскажет как сделать? | |
|
|
|
|
|
|
|
для: Тиль
(03.03.2006 в 08:05)
| | Хм... а нет возможности нормализовать таблицу? В таблице три столбца или это это один столбец? | |
|
|
|
|
|
|
|
для: 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 | вино
|
| |
|
|
|
|
|
|
|
для: Trianon
(03.03.2006 в 14:37)
| | да нет, там так....может как то группировать при создании меню? | |
|
|
|
|
|
|
|
для: Тиль
(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 " <b>$name2</b><br>";
}
if($name3 != $nm3)
{
$nm3 = $name3;
$nm4 = "";
echo " $name3<br>";
}
}
|
Тьфу... всё можно. Да только вот, когда заставят Вас объединить хлеб и булку с бакалеей, а мясо разделить на свинину, говядину и человечину, Вам же придется всё писать по-новой. | |
|
|
|
|
|
|
|
для: Тиль
(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];
}
|
| |
|
|
|
|
|
|
|
для: Тиль
(03.03.2006 в 14:58)
| | Так там действительно ОДИН столбец в таблице? | |
|
|
|
|
|
|
|
для: Trianon
(03.03.2006 в 15:50)
| | нет, там много столбцов,я же в примере разделили знаком |, поэтому я про группировку и заговорил | |
|
|
|
|
|
|
|
для: Тиль
(03.03.2006 в 15:55)
| | Ну тогда более быстро работать будет. Мой код тебе опять же подходит, только массив теперь не нужно расщеплять explod-ом а сразу присваивать из полей названия разделов. | |
|
|
|
|
|
|
|
для: XPraptor
(03.03.2006 в 16:01)
| | а можно подробнее? а линии дерева рисоваться будут? | |
|
|
|
|
|
|
|
для: Тиль
(03.03.2006 в 16:17)
| | Млина, за тебя может всю прогу написать? Ты что не сможешь сам в свой дизайн вывести надписи из базы? | |
|
|
|
|
|
|
|
для: XPraptor
(03.03.2006 в 16:28)
| | просто пхп учу вторую неделю а надо уже сделать такое:)) | |
|
|
|
|
|
|
|
для: Тиль
(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"; это третий и последний уровень твоего рубрикатора. А как ты их раскрасишь (с линиями или еще как) это только тебе известно. | |
|
|
|