За последние 24 часа нас посетили 30884 программиста и 1478 роботов. Сейчас ищут 859 программистов ...

Область видимости пользователя

Тема в разделе "Прочие вопросы по PHP", создана пользователем GreatWasp, 27 ноя 2008.

  1. GreatWasp

    GreatWasp Активный пользователь

    С нами с:
    11 янв 2008
    Сообщения:
    94
    Симпатии:
    0
    Адрес:
    Узбекистан, Ташкент.
    Доброе время суток.
    Проблема такая.
    1. Есть группы пользователей (nested sets).
    2. Есть пользователи которые принадлежат группам.
    3. Есть такая фитча как область видимости. К примеру Вы где-то в середине дерева групп. И Вам дозволен просмотр пользователей по ACL. Следовательно Вы должны видеть всех кто ниже по дереву.

    Как оптимально хранить отношения кто кого видит или не видит? Раньше создавал 2 таблицы такого рода.
    1. Таблица видимости групп. 2 поля - ЮЗЕР -> ГРУППА_КОТОРУЮ ВИДИТ ЮЗЕР.
    2. Таблица видимости пользователей. 2 поля - ЮЗЕР -> ПОЛЬЗОВАТЕЛЬ КОТОРОГО ВИДИТ ЮЗЕР.

    И думал что все ок. НО когда добавляются новые пользователи и группы приходится пересчитывать эти таблицы, а элементов там более 250 000 :shock:
    И ведь эти таблицы участвуют в подзапросах, к примеру: SELECT * FROM TABLE WHERE user IN (select target_user from VISIBILLITY_INDEX WHERE user=1). А когда идет запись в эти таблицы то все операции выборки LOCK!

    Вообщем товарисчи выручайте советом.
     
  2. Frozen

    Frozen Активный пользователь

    С нами с:
    20 окт 2008
    Сообщения:
    540
    Симпатии:
    0
    Адрес:
    Москва
    ну nested sets это значения LEFt и RIGHT. Все дочерние узлы, данного узла, лежат между ними.

    есть таблица пользователей. id, name, phone и тд.
    3-я это группы пользователей. состоит из user_id и group_id
    user_id - id пользоватея и group_id - id группы. пользователь может быть в нескольких группах(наверное)

    допустим LEFT=5 а RIGHT=40

    делаеш запрос SELECT * FROM группы пользоватлей WHERE group_id BETWEEN 5 AND 40

    вот тебе и все пользователи.
     
  3. GreatWasp

    GreatWasp Активный пользователь

    С нами с:
    11 янв 2008
    Сообщения:
    94
    Симпатии:
    0
    Адрес:
    Узбекистан, Ташкент.
    Не в тему.
    Вопрос был
    По поводу left & right я в курсе и без этого примера %)

    Не хранить отношения а постоянно их выдергивать из групп это долгая операция.
    Но все равно спасибо за внимание.
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    O_O
    Полагаю, лучше добавить поле "ранг". И пускай юзер видит пользователей, "ранг" которых меньше или равно ему (ну или просто меньше). Число ранга не обязательно должно быть уникальным.
     
  5. GreatWasp

    GreatWasp Активный пользователь

    С нами с:
    11 янв 2008
    Сообщения:
    94
    Симпатии:
    0
    Адрес:
    Узбекистан, Ташкент.
    Думал по поводу рангов и ранее, но если пользователи находятся на одном уровне дерева, но в разных ветвях как тогда ранг высчитывать?