[MySQL] Циклическая выборка из базы данных

Тема в разделе "Базы данных", создана пользователем PHPCod3r, 28 сен 2012.

Модераторы: latteo
  1. PHPCod3r

    PHPCod3r

    Регистр.:
    7 июн 2010
    Сообщения:
    261
    Симпатии:
    25
    Вообщем встала такая проблема, даже точно не знаю как лучше ее реализовать, нужно в базе данных сделать следующие,

    Есть таблица в которой в колонке varible стоит значение D (D это строка) с этим значением связаны еще несколько D_01 D_02 D_03( тоже строки), и они как то храняться в таблице, например в какой нить другой ячейке,как лучше их хранить я пока не решил, может в той же записи таблицы что и D? При этом в таблице для каждой строки D_01 D_02 D_03 есть своя записть, где в ячеке variable стоит D_01, D_02, D_03, причем с D_01 связаны в свою очередь значения D11 D_12 D_13 , а с D_02 связаны значения D_21 D_22 и тд
    Нужно написать запрос, который бы выбирал сначало строку таблицы с D , потом строки в которой есть D_01 D_02 D_03, потом строки в которых D_11 D_12 D_13 и тд, то есть выбирал бы все строки в которых в поле varible, стоит значение связаное с значением фигурирующим на предыдущем шаге.
    И так до тех пор пока не появтятся значения с которыми никто больше не связан, Предпологается что такие есть , с каких бы начальных значении мы не стартовали.

    Как лучше написать такие запросы, наверно одним запросом тут не обойтись?
     
  2. tirrex

    tirrex

    Регистр.:
    9 ноя 2008
    Сообщения:
    213
    Симпатии:
    60
    Если я правильно понял задачу, это можно органиовать так:
    создаем таблицу table с полями variable и parent
    в parent будем хранить значение родителя

    parent varaible

    D
    D D_01
    D D_02
    D D_03
    D_01 D_11
    D_01 D_12
    D_01 D_13

    в таком случае, если нужны записи без родителей - выбираем строки с parent = NULL
    если записи без потомков - "SELECT variable FROM `table` WHERE variable not in (SELECT parent FROM `table`)"
     
  3. lift

    lift Читатель

    Заблокирован
    Регистр.:
    1 июл 2007
    Сообщения:
    2.226
    Симпатии:
    1.377
    Перейти по ссылке
    Ты тут не только простым запросом не обойдешся, а, если у тебя там реально много информации, можеш тупо просто на этом примере начать писать алгоритмы таких рассчетов эффективные, которые у тебя как минимум Дуров и Усманов выкупят без вопросов, а потом Волож, Цукинберг и Брин с Пейджем добежать успеют с кучей бабок чтоб выкупить у тебя эти технологии.
    Это просто так тебе, чтоб ты представлял себе масштаб твоего вопроса. По ссылке выше задачка, которая по сравнению с твоей вообще тривиальней некуда.
     
  4. PHPCod3r

    PHPCod3r

    Регистр.:
    7 июн 2010
    Сообщения:
    261
    Симпатии:
    25
    Да, вы правы, что суть этого алгоритма, грамотный обход дерева, единствено, что деревья у меня не очень большие поэтому, основной вопрос, это то как их лучше держать в БД
     
  5. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.175
    Симпатии:
    2.197
  6. PHPCod3r

    PHPCod3r

    Регистр.:
    7 июн 2010
    Сообщения:
    261
    Симпатии:
    25
    Горбушка нравится это.
  7. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.175
    Симпатии:
    2.197
    PHPCod3r, хотел я скинуть эту статью тоже, но потерял в глубинах закладок... Это один из лучших способов организации деревьев, т.к. отпадает необходимость кэширования и зная 1 элемент можно получить доступ ко всем его родителям/детям... Но, увы и ах, требует 2 запроса к базе на каждый элемент. С деревьями вообще сложно сделать с 1 запросом...

    Ну а вообще, если меняется это дерево редко - можно хранить структуру в кэше и обновлять кэш при изменении чего-либо или если он побился...
     
    PHPCod3r нравится это.