EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

Фильтровка категорий
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
Фильтровка категорий
Автор Сообщение
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 Монеты

СообщениеДобавлено: Пн, 08 Дек, 2008 17:07    Заголовок сообщения: Ответить с цитатой

Выбираем все категории , помещаем в массив и вытягиваем нужные по ref
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
[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)
      }         
}

Не тестил, но должно быть так Very Happy главное чтобы зацикливание в pref_category_ref не было Very Happy

P.S. Незачем стеснятся делать людям подарки Wink
P.P.S.Более подробно о этом решении здесь
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
madhamster
Согнул ложку
Согнул ложку


Зарегистрирован: 09.10.2006
Сообщения: 902

432 Монеты

СообщениеДобавлено: Пн, 08 Дек, 2008 20:32    Заголовок сообщения: Ответить с цитатой

Такие дела делаются одной таблицей...
_________________
NextStage - live music competition
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Пн, 08 Дек, 2008 20:35    Заголовок сообщения: Ответить с цитатой

madhamster писал(а):
Такие дела делаются одной таблицей...

А какая разница для вывода сколько таблиц?
Напишите структуру одной таблицы с произвольным уровнем иерархии, которую было проще вывести на экран деревом?
Wink
В идеале только SQL запросами?
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
[LP]LordPro.teus
Призрак Лорда
Призрак Лорда


Зарегистрирован: 26.07.2007
Сообщения: 5092

42282 Монеты

СообщениеДобавлено: Пн, 08 Дек, 2008 20:38    Заголовок сообщения: Ответить с цитатой

Веденин писал(а):
madhamster писал(а):
Такие дела делаются одной таблицей...

А какая разница для вывода сколько таблиц?
Напишите структуру одной таблицы с произвольным уровнем иерархии, которую было проще вывести на экран деревом?
Wink
В идеале только SQL запросами?

В идеале как раз выбрать один раз все - и дальше на PHP Smile А таблица, вроде, и так одна... и выборку уже сделали - все уже в массивах
_________________

До выхода 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


Ведь об этом был пост?
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
[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 уровня. Никаких таблиц - из таблиц все, что нужно - уже получили. В два массива. Вот сделать эту сортировку прямо из этих массивов и просят..

Ничего не понял Sad что вы имеете в виду? Если вам нужно иерархическое дерево, с котором можно как угодно работать, а не просто вывести в порядке очереди. Понятно, что если это вывод просто меню проще сделать таблицу (общий_порядок, уровень вложености, имя), но ведь условия здесь совсем другие, пример:
Код:
общий_порядок, уровень_вложености, имя
         0                           0                   root
         1                           1                      1
         2                           2                     1.1
         3                           1                       2
         4                           2                      2.1

Отоброзить меню в том виде как я написал она сможет, но вот реальная работа с деревом не получится.
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Вт, 09 Дек, 2008 06:33    Заголовок сообщения: Ответить с цитатой

P.S. Наверно я не правильно понял задание топикпастера Embarassed , видимо все таки предпологается не любой уровень иерархии, а только категории и подкатегории, в общем решение тоже т.к. оно универсально

Всем сори Embarassed
Впрочем полезный скрипт написал уже хорошо, пригодится в хозяйстве Very Happy

Если не хотите заморачиватся с итерациями можно написать так
Код:
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>';
      }         
}

_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
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];
}

_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Thewirus
Пол-пирога
Пол-пирога


Зарегистрирован: 16.08.2007
Сообщения: 91

427 Монеты

СообщениеДобавлено: Вт, 09 Дек, 2008 13:31    Заголовок сообщения: Ответить с цитатой

Всем спасибо, разобрался...
ЗЫ, Веденин, твой скрипт не помог, но подсказал идею...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
На страницу 1, 2  След.
Страница 1 из 2

 


EOMY TOP 100 Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group


Рейтинг SIMPLETOP.NET