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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обойти это дерево? 
:(
    Опции темы
Артем125
Дата 28.9.2009, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет всем

дано дерево для примера в прикрепленном файле

его необходимо обойти, получая каждую ветку, затем отображать в указанном ниже порядке.

39
|
-----41
        |
        |-----48
                 |
                 |-----52
                 |------54
        |------53
------42
------43
        |-------60

           
 думаю так сделать: одним запросом вытаскиваю самую левую ветку
Код

        $result_t = mysql_query("SELECT t1.sections_name AS lev1, t2.sections_name as lev2, t3.sections_name as lev3, t4.sections_name as lev4 
                                FROM ".TABLE_SECTIONS." AS t1
                                LEFT JOIN ".TABLE_SECTIONS." AS t2 ON t2.sections_parent = t1.sections_parent

                                !!!!Вопрос 2!!!

                                WHERE t1.sections_parent = ".intval($_POST['page_id'])."
                              ");

запоминаю значения в массив 39 41 58 52 54
далее вытаскиваю следующую ветку, сравниваю значения с массивом и вывожу те значения (53), что нет в массиве, 
и т.д.

Правильный ли ход мыслей? и

!!!!Вопрос 2!!! Посмотрите на sql запрос. если средствами php формировать вот эти строки LEFT JOIN ".TABLE_SECTIONS." AS t3 ON t3.sections_parent = t2.sections_parent до тех пор, пока ветка не пройдена до конца, то как узнать в этом запросе сколько таких строк надо?




        

Присоединённый файл ( Кол-во скачиваний: 13 )
Присоединённый файл  _______1.gif 3,15 Kb
PM MAIL   Вверх
solenko
Дата 28.9.2009, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

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



Т.к. нужо обойти все дерево, то рационально выбирать ВСЕ данные одним запросом и обрабатывать уже на стороне php.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Артем125
Дата 28.9.2009, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Тогда впринципе мой запрос подходит, только не знаю как узнать сколько таких LEFT JOIN ".TABLE_SECTIONS." AS t3 ON t3.sections_parent = t2.sections_parent  строк формировать или может как то по другому все данные выцепить в массив?

Это сообщение отредактировал(а) Артем125 - 28.9.2009, 11:01
PM MAIL   Вверх
Ипатьев
Дата 28.9.2009, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

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



SELECT * FROM table_sections
PM MAIL   Вверх
capitan
Дата 28.9.2009, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Артем125, 

"Дерево каталогов NESTED SETS (вложенные множества) и управление им "
http://www.getinfo.ru/article610.html

Все остальные варианты хороши на маленьких объёмах. При больших объёмах, скрипты еле ворочаются. 
PM MAIL WWW ICQ   Вверх
Ипатьев
Дата 28.9.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

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



при больших ставках ворочаются, как раз NESTED SETS
PM MAIL   Вверх
capitan
Дата 28.9.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ипатьев, Делал каталог товаров с вложенностью категорий. После использования NESTED SETS , все стало гораздо шустрее работать. Кстати в статье куча ошибок в запросах. Пришлось многое переписывать. Единственное что пока не успел реализовать - это сортировку категорий. Не до неё smile Выбор по ключам  в разы шустрее работает.
PM MAIL WWW ICQ   Вверх
Ипатьев
Дата 28.9.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

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



"все стало шустрее работать" - это совсем не показатель.
сделал машину на дровах. после этого пересел на велосипед - стало гораздо шустрее! если кое-кто не умеет делать машины, то это совсем не означает, что они в принципе медленнее велосипеда.

а еще есть мнение, что сами товары и каталог с разделами можно не класть в одну таблицу. и дерево волшебным образом станет маленьким.


PM MAIL   Вверх
capitan
Дата 28.9.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ипатьев, товары от категорий разделены. Вложенность присутствует у таблицы с категориями.  Вот их в админке и нужно выводить, чтобы работать. Причем вложенность не ограничена.  По-этому из всех вариантов, выбрал все таки NESTED SETS. Все дерево обходится одним запросом SELECT безовсяких JOIN и UNION.
PM MAIL WWW ICQ   Вверх
Ипатьев
Дата 28.9.2009, 15:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

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



Цитата(capitan @  28.9.2009,  15:20 Найти цитируемый пост)
Вложенность присутствует у таблицы с категориями. 

В этом случае она небольшая, и nseted sets не представляет никаких преимуществ по сравнению с другими способами.


Это сообщение отредактировал(а) Ипатьев - 28.9.2009, 15:24
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0486 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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