Как добавить значения полей в огромную таблицу с иерархией объектов?

Здравствуйте!

Есть таблица вида guid, parent_guid в БД mysql.
Самые верхние объекты имеют parent_guid = null. Кол-во уровней 4.

В интерфейсе есть фильтры по объектам верхних уровней и нужно по ним получать объекты с нижних уровней.
Таблица содержит 200 тыс объектов и запрашивать каждый нижний объект было бы слишком долго.

Я хочу добавить каждому объекту в таблице поле top_guid, в котором будет значение верхнего объекта, и таким образом выводить объекты по фильтру.
Сейчас php-скрипт добавляет такое значение в районе 9 часов.

Как удобнее всего добавить эти значения через sql запрос?
Какие ещё возможны варианты решения?
  • Вопрос задан
  • 174 просмотра
Пригласить эксперта
Ответы на вопрос 1
Я использую примерно такой алгоритм. Считываю простым запросом из БД (два поля) всю табличку и создаю дерево со всеми подуровнями. Вроде легко внести изменения в алгоритм, чтоб налету вставлять top_guid или затем пробежаться по массиву и добавить.

/*
 * make a tree array based on sql query
 */
function buildtree()
{
    $refs = array();
    $list = array();

    $nodes = (Получить поля guid и parent_guid из всей таблички);

    foreach ($nodes as $data) {
        $thisref = &$refs[$data['guid']];
        $thisref['parent_guid'] = $data['parent_guid'];
        if ($data['parent_guid'] == null) {
            $list[$data['guid']] = &$thisref;
        } else {
            $refs[$data['parent_guid']]['children'][$data['guid']] = &$thisref;
        }
    }
    return $list;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы