![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Pitbul |
|
||||||
![]() Fruzenshtein ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 30.4.2008 Где: Киев Репутация: нет Всего: нет |
Добрый день. Недавно передо мной стала задача создать сайт с большим количеством пунктов / подпунктов каталога.
Буду лаконичным, как спартанец ![]() Дано: 1. Таблица в БД categories ( cat_id | parent | cat_name ) 2. Запрос с помощью которого мы вытаскиваем все записи из таблицы categories:
3. Запись каждой строки результирующей таблицы в специально созданный массив $list
4. Функция, которая работает непосредственно с массивом $list, чтобы избежать постоянных запросов к БД.
Вопрос: Какие условия сравнения cat_id со значениями parent придумать, чтобы иерархический каталог был действующим? Т.к. то до чего додумался я просто выводит все в виде списка с одинаковым уровнем вложенности. Буду рад услышать и советы по оптимизации моего решения. Огромное спасибо ![]() --------------------
### JAVA ###### programming ### |
||||||
|
|||||||
ayax2005 |
|
|||
![]() echo $smile ![]() ![]() Профиль Группа: Участник Сообщений: 516 Регистрация: 17.4.2008 Где: Питер Репутация: 2 Всего: 11 |
Сомневаюсь что просто сравнение этих полей даст вменяемый результат.
По сути у вас получается дерево узлов, вот и разбирайте его как дерево от вершины к элементам нижних уровней. -------------------- все вопросы - из-за неверной формулировки задачи |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
где-то так Это сообщение отредактировал(а) baldina - 4.10.2010, 22:41 |
|||
|
||||
Pitbul |
|
|||
![]() Fruzenshtein ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 30.4.2008 Где: Киев Репутация: нет Всего: нет |
ayax2005
Но я думал использовать в функции алгоритм такого плана: 1. Записываем строку с cat_id = 1 2. Проводим поиск по массиву $list и выискиваем все строки где parent = 1 3. Выводим вслед за cat_id = 1 все строки где parent = 1 и сразу же анСэтим их из $list 4. Проводим ту же операцию, но для cat_id = 2 ... Неужели это плохой алгоритм? Это сообщение отредактировал(а) Pitbul - 4.10.2010, 22:44 --------------------
### JAVA ###### programming ### |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
я Вам выше такой алгоритм и набросал.
но он действительно плохой, т.к. использует Ваш $list, а это неэффективно. лучше каждым элементом массива с cat_id хранить массив элементов, у которых parent==cat_id. т.е. хранить в виде дерева. тогда его обход будет проще, без лишних проверок. щас покажу... |
|||
|
||||
Pitbul |
|
|||
![]() Fruzenshtein ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 30.4.2008 Где: Киев Репутация: нет Всего: нет |
baldina
Хороший код получился ![]() Буду с ним и далее работать! Очень признателен! ![]() Окей, тогда жду новый вариант решения задачи. Будет интересно посмотреть на новые пути решения ![]() Это сообщение отредактировал(а) Pitbul - 4.10.2010, 22:53 --------------------
### JAVA ###### programming ### |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
Это сообщение отредактировал(а) baldina - 4.10.2010, 23:06 |
|||
|
||||
ayax2005 |
|
|||
![]() echo $smile ![]() ![]() Профиль Группа: Участник Сообщений: 516 Регистрация: 17.4.2008 Где: Питер Репутация: 2 Всего: 11 |
baldina, +стопяцот
-------------------- все вопросы - из-за неверной формулировки задачи |
|||
|
||||
Pitbul |
|
|||
![]() Fruzenshtein ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 30.4.2008 Где: Киев Репутация: нет Всего: нет |
ayax2005, baldina
Кодерское спасибо Вам за помощь=) ![]() --------------------
### JAVA ###### programming ### |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |