adsl club

Справочник

Форум

Программы

Фильмы

Ресурсы

Файлообмен

Хостинг

Ростелеком
Сведущие в php - помогите
Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)ПРОГРАММИРОВАНИЕ
Автор Сообщение
Richard Ferlow
Гуру
Предупреждений : 2
СообщениеДобавлено: Чт 30-11-06 : 17-58    Заголовок сообщения: Сведущие в php - помогите Ответить с цитатой

Блин, не могу придумать никак.
Ситуация такая.
Есть система пользователей. Она имеет иерархичную систему. А именно - есть один пользователей - он заводит еще двух, и они становятся его пользователями, те в свою очередь еще сколько-то, они уже их пользователями и так далее. Я думаю структура ясна.
Сей вариант в примитиве выглядит просто - в базе данных три колонки(ну в примитиве конечно) - id пользователя, имя пользователя, id того, кому принадледжит. Собственно вот, все просто. НО.
Мне надо так, чтобы у двух(и более) пользователей мог бы быть одинаковый под пользователь.
Тоесть он бы принадлежал не только тому, кто его создал, но и еще какому-то.
В теории можно было бы сделать так - в id того, кому принаджлежит записывать значения через запятую.(1,6,9) Но, я потом не знаю как оттуда удалять, как обрабатывать это, если понадобится от одного пользователя убрать и пристыковать к другому.
Дальше, эьл порождает проблему вывода всех пользователь в виде...ну похожем на генеалогическое дерево(все я думаю представляют как это). Это происходит как - берется первый пользователь, и выясняется, какие у него есть пользователи, выводим их, а потом выводим пользователей этих пользователей - ну и т.д. Проблема в том, что это получается нужно через скрипт всю базу пользователей прогонять, чтобы найти тех, у кого в "id того, кому принадлежит" записаны нужные нам значений, ибо стандартную выборку в духе WHERE id=$id мы произвести не можем.
В общем - что делать...ума не приложу..как сделать, как оперировать этим.
Помогите кто ведает.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
Richard Ferlow
Гуру
Предупреждений : 2
СообщениеДобавлено: Чт 30-11-06 : 18-20    Заголовок сообщения: Ответить с цитатой

Нашелся ответ.


Завести отдельную базу принадлежностей


1 3
1 5
1 7

2 4
2 5

Надо - добавил, что 5 принадлежит ещё и 3

3 5

Если же кто-то перешёл к кому-то, то от кого (2) меняем на к кому (3)
1 3
1 5
1 7

2 4
3 5

Дальше ушёл 5 от 1 - удаляем.

1 3
1 7

2 4
3 5


Топик можно закрыть
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
def
Гость
СообщениеДобавлено: Чт 30-11-06 : 18-22    Заголовок сообщения: Ответить с цитатой

В ощем, читай статьи типа "Хранение деревьев (графов) в плоском виде".

Можно же отдельно хранить список пользователей, например:
Код:
table users:
id int autoincremet primary;
login varchar(50);
password varchar(50);
и т.п.


А отдельно таблицу связей, например:
Код:
table relations:
parent_id int;
user_id int.

По обоим полям индексы.

По поводу вывода, как я бы сделал, если записей немного — загрузил таблицу relations в массив, оббежал бы её ("обход графа в глубину" — рекурсивная функция), и в процессе обхода выбирал инфу по нужным пользователям из users.
Мой вариант неидеален... Наверное, можно попробовать построить SQL-запрос, который выберет тебе то что нужно.
 Наверх
def
Гость
СообщениеДобавлено: Чт 30-11-06 : 18-24    Заголовок сообщения: Ответить с цитатой

Я долго писал Smile
 Наверх
M1Les
Эксперт
СообщениеДобавлено: Чт 30-11-06 : 18-25    Заголовок сообщения: Ответить с цитатой

Ну первую проблему решить можно так -- делаешь таблицу, в которой будет храниться соответствие Id_юзера--Id_его_юзера -- то есть в ней будет два поля. Ну и вторая проблема, мне кажется тут же решится -- просто придется побегать по таблицам Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
M1Les
Эксперт
СообщениеДобавлено: Чт 30-11-06 : 18-25    Заголовок сообщения: Ответить с цитатой

гг) я еще дольше Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
Richard Ferlow
Гуру
Предупреждений : 2
СообщениеДобавлено: Чт 30-11-06 : 18-27    Заголовок сообщения: Ответить с цитатой

Вот таблицу со связями щас и буду делать.
Я че-то уперся в одну таблицу, и сижу торможу уже долго.
А с выводом... из table relations буду выбирать по parentid и выводить через fetcharray и while
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
Richard Ferlow
Гуру
Предупреждений : 2
СообщениеДобавлено: Чт 30-11-06 : 18-28    Заголовок сообщения: Ответить с цитатой

Во, буду знать что у нас все таки есть кто разбирается Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
andryv
Форумчанин
СообщениеДобавлено: Чт 30-11-06 : 22-39    Заголовок сообщения: Ответить с цитатой

хех... собственно самая простая связь многие ко многим...
че думать-то?
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение Посетить сайт автора   Номер ICQ
Richard Ferlow
Гуру
Предупреждений : 2
СообщениеДобавлено: Чт 30-11-06 : 22-48    Заголовок сообщения: Ответить с цитатой

andryv, да все уже высказались и пришли к решению, поздновато ты Smile Проблемы была потмоу как я средствами одной таблицы хотел это сделать. Я даже придумал как - но было бы до не могу геморно.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
def
Гость
СообщениеДобавлено: Чт 30-11-06 : 23-29    Заголовок сообщения: Ответить с цитатой

andryv писал(а):
хех... собственно самая простая связь многие ко многим...
че думать-то?

Да часто бывает что "залипаешь" и простого-гениального не видишь Smile
 Наверх
farlow
Форумчанин
СообщениеДобавлено: Чт 7-12-06 : 23-06    Заголовок сообщения: Ответить с цитатой

def писал(а):
andryv писал(а):
хех... собственно самая простая связь многие ко многим...
че думать-то?

Да часто бывает что "залипаешь" и простого-гениального не видишь Smile

в такие моменты надо на все плюнть и покурить или пива попить
потом мозги проясняются и тайное становится явным
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение Посетить сайт автора   Номер ICQ
def
Гость
СообщениеДобавлено: Чт 7-12-06 : 23-11    Заголовок сообщения: Ответить с цитатой

farlow писал(а):
в такие моменты надо на все плюнть и покурить или пива попить
потом мозги проясняются и тайное становится явным

Ага, можно просто сменить вид деятельности Smile
 Наверх
M1Les
Эксперт
СообщениеДобавлено: Чт 7-12-06 : 23-17    Заголовок сообщения: Ответить с цитатой

def
Ага, как у нас говорила семинаристка по терверу: "Откройте задачник, если вы не можете решить какой-то задачи, то откройте книгу под названием Справочник ВУЗов Новосибирска и подыщите себе другое учебное заведение".
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
markers
Главный Модератор
СообщениеДобавлено: Чт 7-12-06 : 23-24    Заголовок сообщения: Ответить с цитатой

Мдяя, я когда магаз писал, бегал иногда за пивом в рабочее время Smile И главное помогало Smile))
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение Посетить сайт автора   Номер ICQ
Показать сообщения:   
Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)ПРОГРАММИРОВАНИЕ Часовой пояс: GMT + 7
Страница 1 из 1

 

 
Аватары: Вкл|Выкл   ЮзерИнфо: Вкл|Выкл   Подписи: Вкл|Выкл
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы