|
Фильтровка категорий
|
| Автор |
Сообщение |
Thewirus Пол-пирога

Зарегистрирован: 16.08.2007 Сообщения: 91
427 
|
Добавлено: Пн, 08 Дек, 2008 16:01 Заголовок сообщения: Фильтровка категорий |
|
|
Застопорился на элементарной с виду задачке:
2 таблицы, первая это pref_category(два столбца: айди, имя_категории), вторая pref_category_ref(тоже два столбца:айди_рут_категории,айди_суб_категории).
Мне нада вывести списком все категории, используя инструкцию второй табл. Как это сделать, нет идей. |
|
| Вернуться к началу |
|
 |
lazutov while (1==1);


Зарегистрирован: 30.04.2007 Сообщения: 3840
111220 
|
|
| Вернуться к началу |
|
 |
[LP]LordPro.teus Призрак Лорда


Зарегистрирован: 26.07.2007 Сообщения: 5092
42282 
|
Добавлено: Пн, 08 Дек, 2008 17:13 Заголовок сообщения: |
|
|
lazutov
насколько я понял - нужны все. То есть, достать все категории и субкатегории и разместить:
кат1
кат2
субкат от кат2
субкат от кат2
кат 3
субкат от кат3 _________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь! |
|
| Вернуться к началу |
|
 |
Thewirus Пол-пирога

Зарегистрирован: 16.08.2007 Сообщения: 91
427 
|
Добавлено: Пн, 08 Дек, 2008 17:17 Заголовок сообщения: |
|
|
[LP]LordPro.teus
Вы правильно поняли...
lazutov
выбрать из БД и поместить в масив то ясно, но сама отфильтровка.... |
|
| Вернуться к началу |
|
 |
Веденин Красные глаза


Зарегистрирован: 17.05.2007 Сообщения: 2066 Откуда: Самара 11733 
|
Добавлено: Пн, 08 Дек, 2008 19:42 Заголовок сообщения: |
|
|
Это задача например в Оракле легко бы решилась одним иерархически запросом, но поскольку эта роскошь СУБД совсем другого уровня, то такая задача построения дерева любого степени вложености решается использованием итерационных функций (стандартный SQL не подходит ни как), пусть есть два массива | Код: | $pref_category[id]=name
$pref_category_ref[id]=parent_id | и верний уровень имеет parent_id = 0;
Строим итерационные функции:
| Код: | getTree(0)
function getTree($parent_id){
global $pref_category,$pref_category_ref;
for($i=0;$i<count($pref_category_ref);$i++)
if($pref_category_ref[$i]==$parent_id){
echo $pref_category[$i].'<br>';
getTree($i)
}
} |
Не тестил, но должно быть так главное чтобы зацикливание в pref_category_ref не было
P.S. Незачем стеснятся делать людям подарки
P.P.S.Более подробно о этом решении здесь _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг |
|
| Вернуться к началу |
|
 |
madhamster Согнул ложку


Зарегистрирован: 09.10.2006 Сообщения: 902
432 
|
Добавлено: Пн, 08 Дек, 2008 20:32 Заголовок сообщения: |
|
|
Такие дела делаются одной таблицей... _________________ NextStage - live music competition |
|
| Вернуться к началу |
|
 |
Веденин Красные глаза


Зарегистрирован: 17.05.2007 Сообщения: 2066 Откуда: Самара 11733 
|
Добавлено: Пн, 08 Дек, 2008 20:35 Заголовок сообщения: |
|
|
| madhamster писал(а): | | Такие дела делаются одной таблицей... |
А какая разница для вывода сколько таблиц?
Напишите структуру одной таблицы с произвольным уровнем иерархии, которую было проще вывести на экран деревом?
В идеале только SQL запросами? _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг |
|
| Вернуться к началу |
|
 |
[LP]LordPro.teus Призрак Лорда


Зарегистрирован: 26.07.2007 Сообщения: 5092
42282 
|
Добавлено: Пн, 08 Дек, 2008 20:38 Заголовок сообщения: |
|
|
| Веденин писал(а): | | madhamster писал(а): | | Такие дела делаются одной таблицей... |
А какая разница для вывода сколько таблиц?
Напишите структуру одной таблицы с произвольным уровнем иерархии, которую было проще вывести на экран деревом?
В идеале только SQL запросами? |
В идеале как раз выбрать один раз все - и дальше на PHP А таблица, вроде, и так одна... и выборку уже сделали - все уже в массивах _________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь! |
|
| Вернуться к началу |
|
 |
Веденин Красные глаза


Зарегистрирован: 17.05.2007 Сообщения: 2066 Откуда: Самара 11733 
|
Добавлено: Пн, 08 Дек, 2008 20:45 Заголовок сообщения: |
|
|
я про другое есть таблица с произвольным уровнем иерархии вида
| Код: | id id_parent name
9 0 root
7 9 1
1 4 2.1
4 9 2
2 1 2.1.1
3 2 2.1.1.1
8 7 1.1 |
Отсортируйте в виде дерева на экране каким либо более простым образом?
т.е. так
| Код: | root
1
1.1
2
2.1
2.1.1
2.1.1.1 |
Ведь об этом был пост? _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг |
|
| Вернуться к началу |
|
 |
[LP]LordPro.teus Призрак Лорда


Зарегистрирован: 26.07.2007 Сообщения: 5092
42282 
|
Добавлено: Пн, 08 Дек, 2008 20:57 Заголовок сообщения: |
|
|
Веденин
в root никто не будет писать 2.1.1.1 - проще написать "2" или какой там id имеет соответствующая субкатегория... по сути, пока имеем простую структуру, где глубина субкат - до 1 уровня. Никаких таблиц - из таблиц все, что нужно - уже получили. В два массива. Вот сделать эту сортировку прямо из этих массивов и просят.. _________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь! |
|
| Вернуться к началу |
|
 |
Веденин Красные глаза


Зарегистрирован: 17.05.2007 Сообщения: 2066 Откуда: Самара 11733 
|
Добавлено: Вт, 09 Дек, 2008 03:44 Заголовок сообщения: |
|
|
| [LP]LordPro.teus писал(а): | Веденин
в root никто не будет писать 2.1.1.1 - проще написать "2" или какой там id имеет соответствующая субкатегория... по сути, пока имеем простую структуру, где глубина субкат - до 1 уровня. Никаких таблиц - из таблиц все, что нужно - уже получили. В два массива. Вот сделать эту сортировку прямо из этих массивов и просят.. |
Ничего не понял что вы имеете в виду? Если вам нужно иерархическое дерево, с котором можно как угодно работать, а не просто вывести в порядке очереди. Понятно, что если это вывод просто меню проще сделать таблицу (общий_порядок, уровень вложености, имя), но ведь условия здесь совсем другие, пример:
| Код: | общий_порядок, уровень_вложености, имя
0 0 root
1 1 1
2 2 1.1
3 1 2
4 2 2.1 |
Отоброзить меню в том виде как я написал она сможет, но вот реальная работа с деревом не получится. _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг |
|
| Вернуться к началу |
|
 |
Веденин Красные глаза


Зарегистрирован: 17.05.2007 Сообщения: 2066 Откуда: Самара 11733 
|
Добавлено: Вт, 09 Дек, 2008 06:33 Заголовок сообщения: |
|
|
P.S. Наверно я не правильно понял задание топикпастера , видимо все таки предпологается не любой уровень иерархии, а только категории и подкатегории, в общем решение тоже т.к. оно универсально
Всем сори
Впрочем полезный скрипт написал уже хорошо, пригодится в хозяйстве
Если не хотите заморачиватся с итерациями можно написать так
| Код: | getTree();
function getTree(){
global $pref_category,$pref_category_ref;
for($i=0;$i<count($pref_category_ref);$i++)
if($pref_category_ref[$i]==0){
echo $pref_category[$i].'<br>';
for($j=0;$j<count($pref_category_ref);$j++)
if($pref_category_ref[$j]==$parent_id)
echo $pref_category[$j].'<br>';
}
}
|
_________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг |
|
| Вернуться к началу |
|
 |
Thewirus Пол-пирога

Зарегистрирован: 16.08.2007 Сообщения: 91
427 
|
Добавлено: Вт, 09 Дек, 2008 06:57 Заголовок сообщения: |
|
|
Веденин
Объясняю структуру еще рас:
pref_category
| Код: | id name
1 NAME1
2 NAME2
3 NAME3
|
pref_category_ref
| Код: | parent_id child_id
1 2
3 0
|
Если 0 то суб категорий нету, к даной категории нету |
|
| Вернуться к началу |
|
 |
Веденин Красные глаза


Зарегистрирован: 17.05.2007 Сообщения: 2066 Откуда: Самара 11733 
|
Добавлено: Вт, 09 Дек, 2008 07:49 Заголовок сообщения: |
|
|
| Thewirus писал(а): | Веденин
Объясняю структуру еще рас:
pref_category
| Код: | id name
1 NAME1
2 NAME2
3 NAME3
|
pref_category_ref
| Код: | parent_id child_id
1 2
3 0
|
Если 0 то суб категорий нету, к даной категории нету |
Это вообще просто, предположим что в массиве $pref_category_ref данные отсортированы по parent_id,
| Код: | $tmp = '';
for($i = 0;$i<count($pref_category_ref);$i++) {
$j = key($pref_category_ref[$i]);
if($pref_category[$j] != $tmp) {
echo $pref_category[$j];
$tmp = $pref_category[$j];
}
if($pref_category_ref[$i]>0) echo $pref_category[$i];
} |
_________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг |
|
| Вернуться к началу |
|
 |
Thewirus Пол-пирога

Зарегистрирован: 16.08.2007 Сообщения: 91
427 
|
Добавлено: Вт, 09 Дек, 2008 13:31 Заголовок сообщения: |
|
|
Всем спасибо, разобрался...
ЗЫ, Веденин, твой скрипт не помог, но подсказал идею... |
|
| Вернуться к началу |
|
 |
|