Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дерево каталогов. Функция добавления нового root`а, Особенности создания функции 
:(
    Опции темы
Zhulik
  Дата 5.6.2007, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 5.6.2007

Репутация: нет
Всего: нет



Уважаемые разработчики !
Есть такая ситуация: с помощью РНР вывожу ддерево каталогов из Мускула.
Главные и родительские элементы связаны с помощью таких полей
id --- id_parent  --- priority
1  --- 0         ...
2  --- 1        ...
3  --- 2           .....
Тоисть будет в результате так:
 0 
 |_1
     |_2
и т.д.
Если главные каталоги выводить в порядке возростания приоритета, то как организовать функцию, которая добавляла бы новый каталог между существующими ?
Тогда надо "сдвигать" приоритеты для каждого из рутов ? smile 
PM MAIL   Вверх
rMaveric
Дата 5.6.2007, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 18.7.2003

Репутация: 3
Всего: 6



Думаю указывать приоритет вывода будет слишком накладно, если требуется жестко хранить положение элементов, то лучше делай линк на последующий элемент в списке. ТОгда в случае добавления (удаления) элемента тебе достаточно будет изменить всего 1 элемент, а не все элементы в подпапке.


--------------------
Моя благодарность не будет иметь границ. в определенных рамках конечно ;)
---
Веду IT блог
PM MAIL WWW ICQ   Вверх
rMaveric
Дата 5.6.2007, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 18.7.2003

Репутация: 3
Всего: 6



Также подумай давать ссылку не только на последующий элемент, но и на предыдущий. Больше займет места в базе, но двигаться по элементам будет проще, например для удаления элемента.


--------------------
Моя благодарность не будет иметь границ. в определенных рамках конечно ;)
---
Веду IT блог
PM MAIL WWW ICQ   Вверх
WIPS
Дата 6.6.2007, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Zhulik, можно для задания приоритета использовать префиксное кодирование, тогда для вставки элемента между любыми двумя не придется сдвигать приоритеты других узлов. С префиксными кодами извращаться можно по разному, но для хранения в мускле наверное лучше всего использовать FLOAT (можно будет легко сортировать по приоритету при выборке).

Берем текущие приоритеты и записываем в виде:
0,00
0,01
...
0,99 - величина и разрядность последнего приоритета зависит от к-ва вершин-рутов, хотя можно вставить первые две (приоритеты 0,0 и 0,1), а последующие добавлять по нижеописанному алгоритму.

Алг. поясню на примере. Нам надо добавить вершину между 0,07 и 0,09. 
 1. Если делать втупую. Приоритет новой вершины будет просто плюс единица в следующий младший (след. младший для обоих чисел) разряд от первого числа (т.е. - 0,07 + 0,001 = 0,071). Но это подойдет если у нас добавляется не много вершин, т.к. следующая добавленая вершина (между 0,071 и 0,09) будет иметь приоритет 0,0711, потом 0,07111 и т.д., а точность FLOAT-а хоть и большая, но не бесконечная.
 2. Можно анализировать оба числа не только на разрядность. Т.е. сначала мы вставляем 0,08 (т.е. если есть возможность прибавляем единицу не в след. младший разряд, а просто в младший), потом 0,081, 0,082 ... 0,089, 0,0891, 0,0892 и т.д.

Придется конечно при вставке анализировать приоритеты "соседей", но зато можно не переколбашивать приоритеты всей таблицы  smile 

P.S. Вопрос по моему совсем не по PHP, Zhulik, смотри перенесут твою тему куда нибудь в Алгоритмы и т.п.  smile 

Это сообщение отредактировал(а) WIPS - 6.6.2007, 01:59
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.