2012-03-08 3 views
-1

У меня есть таблица MySQL с 3 столбцами * ID, ITEM_ID, Dependency *Как я могу рекурсивно искать базу данных?

Я хочу знать, что лучший способ рекурсивно проверить через зависимости, например сказать, что я проверку ITEM_ID 3-х зависимостей, и это требует ITEM_ID-I тогда потребуется проверить зависимости для Item_ID 2

Каков наилучший способ достичь этого с помощью PHP?

ID | Item_ID | Dependency | 
---+---------+------------+ 
1 | 3  | 2   | 
---+---------+------------+ 
2 | 2  | 4   | 
---+---------+------------+ 
3 | 2  | 5   | 
---+---------+------------+ 
+1

Вы хотите продолжать работу до тех пор, пока зависимость не будет равна нулю? Каково ваше условие выхода? –

+1

Это уже много раз спрашивали. Просто выполните поиск в stackoverflow или даже в google. – Basti

+0

также является зависимостью самих ссылочных столбцов (т. Е. К идентификатору в одной таблице). R указывает ли она на другую таблицу (таблицы)? – prodigitalson

ответ

0

псевдо-код:

func myQuery(item_ID) { 
    query (item_ID) 
    if (!item_ID.dependency()) 

    else (myQuery(item_ID.dependency()) 
} 

Это будет продолжаться вниз по колонне, пока не дойдете до пункта, который не имеет зависимость.

Краткое описание процесса: Передайте первый элемент функции. Проверьте, есть ли у него зависимость, если это так, вызовите функцию снова с этой зависимостью. В противном случае ничего не делать, и функция вернется. конечно, вы захотите сохранить элементы, возвращаемые запросом, но я оставлю это вам. Вероятно, вы захотите, чтобы это утверждение было в самом конце функции, поэтому, когда все сказано и сделано, ваши данные упорядочены без зависимостей от большинства зависимостей.

0

Для чистого раствора SQL:

Если вы хотите, чтобы выполнить обход иерархии, представленной в таблице и возвращает данные в одном запросе, вы можете использовать серию LEFT OUTER JOIN заявления против таблицы «прогуливать» отношения - это работает до определенной глубины (количество JOINS = глубина дерева). Затем вам нужно решить, какие данные вы хотите спроецировать (SELECT) из этой массивной таблицы.

Смежные вопросы