русский
Germany.ruForen → Архив Досок→ Webdesign und Hosting

Mysql +PHP пару вопросов...

196  1 2 alle
Alexden лЮбитель04.04.06 14:14
Alexden
04.04.06 14:14 
Привет всем. Сижу - ломаю голову . Как умно, быстро и наименьшими затратами ресурсов решить вот такую задачку:
Есть куча народу, собранных в пирамиду. Т.е. реферальная система. Один привел другого итп..
Есть база типа :
ID Name Refer
Так вот у меня проблема - как красиво и без ососбых затрат каждому пользователю вывести его структуру. Типа такой и тако находится на первом уровне, такой и такой на втором и так далее..
Пока есть только один вариант. Делаю выборку где Refer = ID(текущего пользователя). Имеем первый уровень... Потом берем полученный результат - делаем по каждой найденой записи опять поиск - получаем второй уровень итд... И всё это рекурсисей... Но насколько я представляю - при очень большой ветке - время вычислений будет большим и нагрузка на сервер тоже будет немалая.. вот теперь вопрос - есть ли решенее попроще ?
#1 
  Tomasson мумеиси04.04.06 14:28
NEW 04.04.06 14:28 
in Antwort Alexden 04.04.06 14:14
как красиво и без ососбых затрат каждому пользователю вывести его структуру
кого он привел или всех, кто *пошли* от него?:-)
#2 
Alexden лЮбитель04.04.06 14:33
Alexden
NEW 04.04.06 14:33 
in Antwort Tomasson 04.04.06 14:28
Все кто пошли от него....
#3 
  digital_pilot авиатор х#ев04.04.06 14:35
  Tomasson мумеиси04.04.06 14:44
NEW 04.04.06 14:44 
in Antwort Alexden 04.04.06 14:33
а в PHP нет уже готового елемента, типа TreeView?
#5 
Alexden лЮбитель04.04.06 14:57
Alexden
NEW 04.04.06 14:57 
in Antwort digital_pilot 04.04.06 14:35
Ушел в матрицу.. т.е. читать :)
#6 
Alexden лЮбитель04.04.06 14:58
Alexden
NEW 04.04.06 14:58 
in Antwort Tomasson 04.04.06 14:44
к.а. я в этот полный чайник
#7 
  Tomasson мумеиси04.04.06 15:09
NEW 04.04.06 15:09 
in Antwort Alexden 04.04.06 14:58
посмотри в Zend Studio: http://www.zend.com/de/products/zend_studio
Типичный случай. Возможно уже сделали такой элемент.
Надо будет только указать источник и несколько атрибутов.
#8 
voxel3d Aсоциальный психопат04.04.06 15:31
voxel3d
NEW 04.04.06 15:31 
in Antwort Alexden 04.04.06 14:14, Zuletzt geändert 04.04.06 15:36 (voxel3d)
Читать треды лень, напишу, что я использую в этом случае.
Делаю таблицу сущностей безо всяких ссылок, делаю таблицу связей, содержащую ID (сущности), ParentID и количество детей первого уровня. Для построения дерева (или части дерева, где корневым элементом будет сущность с заданным ID) читаю в память таблицу сущностей, читаю в память таблицу связей, в общем, строю два списка. Даже если таблицы огромные, за счёт того, что нет никаких джойнов всё быстро в память засасывается. Далее, допустим, в тривью отображаю всё, загоняю корневым узлом элемент из списка с заданным ID, далее находжу в таблице связей соответствующую запись. Далее в цикле (у нас есть количество детей) к узлу аналогично прицепляю дететей.
С бинарным поиском прикрученным к спискам всё очень быстро происходит без лишных поисков. Можно ещё более оптимизировать и остановиться на чтении непосредственных дететeй, и только когда пользователей откроет узел, для его детей дочитывать необходимую информацию. Для сбора статистики ветка, ессно, должна быть полностью построена.
Dropbox - средство синхронизации и бэкапа файлов.
#9 
Murr коренной житель04.04.06 16:13
Murr
NEW 04.04.06 16:13 
in Antwort Alexden 04.04.06 14:14
Только если ты хранишь отдельно всех кто под ним. При вставке - придется апгрейдить кучку вхождений, но это - операция относительно редкая.
#10 
Murr коренной житель04.04.06 16:20
Murr
NEW 04.04.06 16:20 
in Antwort voxel3d 04.04.06 15:31
А что ты делаешь в случае сбоев по питанию ?
Раз уж инфа должна быть в базе - надо и работать непосредствненно с базой. А производительность - выбор базы, количества процов и памяти... В любом случае делать руками и поддерживать эмулятор ISAM/VSAM - не рентабельно...
#11 
voxel3d Aсоциальный психопат04.04.06 16:26
voxel3d
NEW 04.04.06 16:26 
in Antwort Murr 04.04.06 16:20
Здрасьте, приплыли. Ну, а, что Вы делаете в случае сбоя питания, когда используете дотнетовский датасет? Он, ведь, о ужас, не ориентирован на постоянное соединение! И клиент, получается, не работает всё время непосредственно с базой.
Dropbox - средство синхронизации и бэкапа файлов.
#12 
Murr коренной житель04.04.06 16:32
Murr
NEW 04.04.06 16:32 
in Antwort voxel3d 04.04.06 16:26
У меня то как раз все понятно - откатываются незаконченные транзакции...
В данной ситуации - те, которые производили замену инфы у потомков...
#13 
Murr коренной житель04.04.06 16:37
Murr
NEW 04.04.06 16:37 
in Antwort voxel3d 04.04.06 16:26
P.S. Вообще то начинаю подумывать об том, чтобы поменять методику работы - сначала сбрасывать в промежуточные таблицы - там только на запись - операция + инфо, а процессить - уже потом, отдельными потоками. Благо сейчас скорость не критична, а потеря - смертельна...
#14 
Simple Nothing is f*cked04.04.06 16:37
Simple
NEW 04.04.06 16:37 
in Antwort Murr 04.04.06 16:32
Зубры опять сцепились :-D
#15 
Murr коренной житель04.04.06 16:38
Murr
NEW 04.04.06 16:38 
in Antwort Simple 04.04.06 16:37
Эээ... покури в сторонке - мы не про Оперу...
#16 
Simple Nothing is f*cked04.04.06 16:41
Simple
NEW 04.04.06 16:41 
in Antwort Murr 04.04.06 16:38
Какая неприятность (с)
#17 
Russman старожил04.04.06 16:45
Russman
NEW 04.04.06 16:45 
in Antwort voxel3d 04.04.06 15:31
Чиста как любитель, а процедурку забабахать, которая все сама на сервере вытащит и потом клиенту отдаст в каком-либо виде, не проще?
---
... Если тебя не нашли спасатели - найдyт аpхеологи...
#18 
voxel3d Aсоциальный психопат04.04.06 16:47
voxel3d
NEW 04.04.06 16:47 
in Antwort Murr 04.04.06 16:32
В предложенной мною схеме у потомков при построении дерева ничего не обновляется. Если после построения дерева и отображения его в визуальном элементе предусматриваются изменения дерева, то политика обновления может быть любая, хоть непосредственно при уходе с узла, никто же не заставляет непременно при закрытии программы информацию записывать. Поэтому как там оно вс╦ запитывается: от дизеля или из розетки, безразлично.
Dropbox - средство синхронизации и бэкапа файлов.
#19 
  scorpi_ скептик04.04.06 18:46
NEW 04.04.06 18:46 
in Antwort Alexden 04.04.06 14:14
В ответ на:
вот теперь вопрос - есть ли решенее попроще ?

Есть, причём разные. И чтобы выбрать правильное надо знать какие операции тебе нужны. Например удаление поддеревьев тебе необходимо? Или только добавление отдельных узлов и быстрая выборка?
ЗЫ отвечу может быть только после выходного.
#20 
Murr коренной житель04.04.06 19:08
Murr
NEW 04.04.06 19:08 
in Antwort voxel3d 04.04.06 16:47
хоть непосредственно при уходе с узла
------
При этом затраты будут практически такие же, как при работе с базой напрямую. Может даже чуток выше - за счет подъема большего объема данных. Ну если только самостоятельно кешировать всею инфу и бодаться с политикой обновления... Но зачем это надо, если все и так не долго, при правильной организации данных и индексах, делается напрямую с базой?
#21 
Alexden лЮбитель04.04.06 19:44
Alexden
NEW 04.04.06 19:44 
in Antwort scorpi_ 04.04.06 18:46
Ситуация еще банальней. Короче есть программа, которая ведёт учет всей этой линии итп. Из неё можно экспортировать базу данных в том виде, чтьо я писал сверху. Мне нужно просто это дело в инет выставить - чтобы народ мог заходить и просматривать свою ветвь. вот и всё. Т.е. удаление- это всё будет вестись локально с уже существующим софтом.
#22 
Murr коренной житель04.04.06 19:56
Murr
NEW 04.04.06 19:56 
in Antwort Alexden 04.04.06 19:44
Эээ... TreeView - было в ActiveX'сах, но это, как сам понимаешь, только под MS...
Если надо везде - Java или мухлевать с HТМЛ'ом...
Честно говоря пользователю там дерево совершенно не нужно - операции пользователя обычно ограничиваются посылкой мессаги или всем рефералам, или кому-то одному. Ни для первого, ни тем более для второго нет нужды показывать дерево.

#23 
Alexden лЮбитель04.04.06 20:02
Alexden
NEW 04.04.06 20:02 
in Antwort Murr 04.04.06 19:56
Мурр ты опять в сторону. Я уже написал что нужно пользователю. Он хочет видеть всю структуру, которая под ним. В любом виде: в виде дерева, в виде списка, разделенным по уровням итп..
#24 
Murr коренной житель04.04.06 20:41
Murr
NEW 04.04.06 20:41 
in Antwort Alexden 04.04.06 20:02
Эээ... Объясни заказчику, что есть лимит на размер генерируемого HTML...
Весь объем, загруженный на его систему, ему _не_ нужен и нужен не будет.
#25 
  validol коренной житель04.04.06 21:04
NEW 04.04.06 21:04 
in Antwort Alexden 04.04.06 20:02, Zuletzt geändert 04.04.06 21:05 (validol)
Пример с картинками http://vingrad.ru/PHP-FAQ-002203
#26 
Alexden лЮбитель04.04.06 23:04
Alexden
NEW 04.04.06 23:04 
in Antwort validol 04.04.06 21:04
Ооо - вот это самое простое и вроде как еще и работаещее :)
#27 
Alexden лЮбитель06.04.06 17:02
Alexden
NEW 06.04.06 17:02 
in Antwort Alexden 04.04.06 14:14
Суппер - Всем большое спасибо. Всё получилось.
Блин в очередной раз убеждаюсь что германка с её населением - рулит.
#28 
voxel3d Aсоциальный психопат06.04.06 17:09
voxel3d
NEW 06.04.06 17:09 
in Antwort Alexden 04.04.06 23:04
> Ооо - вот это самое простое и вроде как еще и работаещее :)
Это решение "в лоб". Оно как пузырьковая сортировка.
Dropbox - средство синхронизации и бэкапа файлов.
#29 
Alexden лЮбитель06.04.06 17:13
Alexden
NEW 06.04.06 17:13 
in Antwort voxel3d 06.04.06 17:09
Это понятно что в лоб. просто надо было простое... а далее судя по времени - буду делать другое. хотя уже и сейчас на основе этого появились другие мысли.
ЗЫ Блин трудно начинать сначала - последний раз думал лет 6 назад...
#30 
1 2 alle