За последние 24 часа нас посетили 42483 программиста и 1816 роботов. Сейчас ищут 835 программистов ...

Бинарное дерево: обновление записей

Тема в разделе "MySQL", создана пользователем ivanoff_i, 18 июл 2007.

  1. ivanoff_i

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

    С нами с:
    18 июл 2007
    Сообщения:
    1
    Симпатии:
    0
    Подскажите, пожалуйста, возможно ли реализовать обновление одним запросом или как правильно оптимизировать код.

    Есть таблица
    | id | name | parent | power | exp | leftorright | islast |

    | 1 | Boss | 0 | 100 | 0 | l | 0 |
    | 2 | Петров | 1 | 100 | 0 | l | 0 |
    | 3 | Иванов | 1 | 200 | 0 | r | 1 |
    | 4 | Сидор | 2 | 150 | 0 | l | 1 |

    Как бы у босса 2 листа -- левый Петров и Правый Иванов. И у Петрова есть один Сидор
    Как правильно, проходя с самых нижних к единственному верхнему обновить данные по типу
    Петров exp = ( Сидор pow + Сидор exp )
    Boss exp = ( Петров pow + Петров exp ) + ( Иванов pow + Иванов exp)

    Записей много и если проходиться
    PHP:
    1. do {
    2. взять каждый last = 1 и идти вверх, складывая по правилу выше
    3. } while ( parent != 0 );
    то получится долго, т.к. записей не одна сотня тысяч...

    Плюс надо учитывать, чтобы не сложить одного два раза (например, один раз считая от его правой ветки, второй раз от левой).

    Что посоветуете?
     
  2. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
  3. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    и к чему пришел?