![]() |
|
Модераторы: skyboy |
![]()
|
|
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: нет Всего: 17 |
про каких этих, о Firebird? то есть у нее дерево лучше будет?
там только статьи что-то не нашел на русском, кроме этой http://gsbelarus.com/gs/modules.php?name=N...cle&sid=314 надо будет на англиской по искать Это сообщение отредактировал(а) gcc - 1.8.2009, 19:55 |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 15 Всего: 260 |
надо искать. в oracle есть специальные операторы по работе с деревом, если я не ошибаюсь. что, купишь сервер oracle? может, лучше разбраться с тем же nested sets? все равно нет универсального "самого лучшего из всех возможных решений" и использование того же oracle проигрывает в переносимости использованию того же nested sets. |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
У Оракли есть бесплатная ограниченная версия. Говорят PG тоже умеет деревья обходить. Это сообщение отредактировал(а) Zloxa - 2.8.2009, 10:02 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: нет Всего: 17 |
ok посомтрю на PG
ради интереса, такой запрос в принципе тоже првильный? поставить порядок ступеней (по горизонтале) допустим 50 (хотя можно меньше) тех элементов которых нету, она прогнорирует? а в скрипте все что отсутсвует удалить
Это сообщение отредактировал(а) gcc - 6.8.2009, 03:35 |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: нет Всего: 17 |
интересует вопрос как работать с дереовм? если таблица неограниченная планируется
вынест ивсе будет навернео не правильно... а можно вывести его постранично? или как-то по нему перещатся? |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
||||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: нет Всего: 17 |
я именно так и сделал, но просто не видно какие разделы есть и где они созданы, просто чтобы пользоватся - нужно сидеть в поиске постоянно...
в общем ладно пускай так... но если кто видел как вывести по странично, то скажите как... хотелось бы посмотреть Это сообщение отредактировал(а) gcc - 7.8.2009, 20:57 |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: нет Всего: 17 |
сделал, написал не большую заметку
сейчас думаю над архитектурой еще одного дерева... мне показалось что NestedSet не подойдет для него так как NestedSet все операции кроме SELECT ресурсоемкие!! недостатки в Nested Set: если вы заметили, точно такая же рекурсия, только там идет UPDATE ресурсоемкий который все дерево изменяет (очень много записей) по этому я нашел решение где-то на opennet.ru на innodb с ускорением за счет внешних ключей и транзакции (чтобы дерево не развалилось во время изменение структуры). НО еще говорят что если innodb с большой базой, то грузит сильно сервер, неоднократно сталиквался, но в приципе мне все равно, но тут не знаю, не тестировал... про мое дерево долго рассказывать: 1) щас нарисую "Корень дерева" --> "разедел1" ````````````````` "разедел2"->>>"разедел1" ````````````````` "разедел3"````"разедел2" ````````````````` "разедел4"````"разедел3"->>>>>>"разедел1" ````````````````` "разедел5"````````````````````"разедел2" ````````````````` "разедел6"````````````````````"разедел3" ```````````````````````````````````````````````"разедел4" из этого: а) у кадого раздела может быть свой "подраздел(ы)" б) у кадого раздела может быть "тема(ы) сообщения" как на этом форуме б2) у темы есть коментарии думаю все понятно? 2) нужно сделать: перенос узла, выборка всех родителей вверх, просмотр вывести дерево начиная от како-то элемента, удаление/изменение атрибутов всего дерева со всеми подчиненными узлами если ничего не забыл, может еще что-то все дерево выносить не надо === при обычном parent_id: id parent_id (можно еще level) Преимущества дерева 1) перенос 2) Добавление 3) Нормальный SELECT и SELECT всех родителей (SELECT сразe 50-100 ступеней можно сделать,( т.е. ограничить) а лишние удалить, либо рекурсию) все остальное нормально Недостатки: 1) удаление всего дерева затруднительно (рекурсию надо делать, или процедуру) НО в условии, например присутствует, что пользователи не могут когда они захотят все удалить, литит удлаения должен быть (проблем не будет) 2) узменение атрибута узла и всего поддерева (например надо все дерево скрыть начиная с конкретного узла) (рекурсию надо делать, или триггер) можно записывать level уровень, чтобы сделать еше быстрый SELECT всех родителей и в один НОРМАЛЬНЫЙ запрос т.е. исходя их этого например при обычном NestedSET, пвсе запросы (почти все, удаление, добавление, перенос) ресурсоемкое, но кроме SELECT в этом случае который я привел, грубо говоря, только удаление ресурсоемкое! вообщем, как? писал старался, хотел узнать может есть замечания какие-то? Это сообщение отредактировал(а) gcc - 4.10.2009, 17:45 |
|||
|
||||
| DimW |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
этих проблем в принципе не существует(изучите ниже приведенный пример для оракл):
обратите на организацию связи: references TABLE1 (ID) on delete cascade обратите внимание на это- sys_connect_by_path и на это - select level Это сообщение отредактировал(а) DimW - 5.10.2009, 07:46 |
||||
|
|||||
| gcc |
|
||||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: нет Всего: 17 |
DimW, я вот тоже нашел http://www.opennet.ru/base/dev/hierarchy_sql.txt.html только там под Interbase, заточить по-моему можн под MySQL
в MyISAM таблицых в MySQL такого нету... у меня сейчас таблица именно такая спасибо, посомтрю, с Oracle не работал никогда, буду иметь ввиду на PgSQL... или на innodb ==== я вот как раз хотел оптимизировать DELETE на MySQL (кроме временных таблиц - это сделал) Есть таблица составных деталей с "древесной" структурой, т.е. код/код предка/название, например:
Как в такой таблице красиво сделать рекурсивное удаление всех потомков при удалении записи (чтобы при удалении детали №4 удалились детали №5,6,7)? вот я это нашел... http://forum.foxclub.ru/read.php?29,400359,400507 только там под Interbase, заточить по-моему можн под MySQL например на Visual Foxpro:
но как написать это на MySQL, например, на триггерах или процедурах? не могу понять как это сделать вообще, путаюсь... Это сообщение отредактировал(а) gcc - 5.10.2009, 08:34 |
||||||
|
|||||||
| Deniz |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 6 Всего: 44 |
на триггерах можно примерно так:
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
||||
|
|||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
что такое MyISAM я не знаю, но дока по mysql говорит что каскадное удаление есть: http://dev.mysql.com/doc/refman/5.1/en/inn...onstraints.html |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 6 Всего: 44 |
FireBird пропускает такие триггеры
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
||||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 15 Всего: 260 |
MyISAM - это технология(в документации mysql называется "движком" - Engine), которая определяет особенности хранения данных и работы с ними. Определяется в отдельности на каждую таблицу. С точки зрения SQL-запроса является прозрачным. Но накладывает ограничения. К примеру, MyISAM не поддерживает транзакции и внешние ключи. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |