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

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

196  1 2 alle
Alexden лЮбитель04.04.06 14:14
Alexden
NEW 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
04.04.06 18:46 
in Antwort Alexden 04.04.06 14:14
В ответ на:
вот теперь вопрос - есть ли решенее попроще ?

Есть, причём разные. И чтобы выбрать правильное надо знать какие операции тебе нужны. Например удаление поддеревьев тебе необходимо? Или только добавление отдельных узлов и быстрая выборка?
ЗЫ отвечу может быть только после выходного.
#20 
1 2 alle