2013-09-06 3 views
1

Мне нужна помощь! В основном у меня есть система, которая имеет неограниченное количество категорий и способ ее работы - это уникальные идентификаторы. Таким образом, в основном система найдет корневую папку и сопоставляет все подпапки на основе UID своего родителя. Бесконечный цикл ...Петля через базу данных MySQL до поля = 'указанное значение'

Но теперь я хочу сделать противоположное этому в одном выражении MySQL (если возможно).

В основном я хочу, чтобы это сделать .. (Кстати, это не мой фактический код, это просто, как я хочу, чтобы работать)

SELECT UID FROM Table 
WHERE UID = 'value' 
--AND ALSO: 
SELECT * FROM SameTable 
WHERE UID = The Parent UID just fetched... 

И не делать этого до UID = «указано Стоимость'.

Я серьезно надеюсь, что это имеет смысл!

Возможно ли это? Я мог бы сделать это, используя несколько запросов в цикле PHP, которые я знаю, но это просто похоже на долгий путь и плохую практику.

+0

Я не уверен, что вы хотите. Вам нужен путь к корню файловой системы или путь от выбранного узла до всех листов? – Halcyon

+0

Путь к корню, пожалуйста. В принципе, причина в том, что я собираюсь создать функцию поиска, которую легко найти ... Но мне нужно найти ее путь обратно к корню. –

+0

Вам нужен один запрос для каждого уровня, пока вы не достигнете корня. Вы можете изучить оптимизацию структуры данных для этих видов поиска. – Halcyon

ответ

1

То, что у вас есть, называется «Иерархические данные». Вы должны прочитать об этом в Google. Короче говоря, существует три основных способа представления его в двумерной таблице:

  • Список примыканий (что у вас есть). Вы вряд ли можете сделать это с одним запросом
  • Материализованный путь (мой любимый). Естественный и читаемый. Не так эффективно.
  • Вложенный набор (наиболее сложный), но самый мощный.

Вы можете выбрать любую систему, в которой вы, как и я, придерживаетесь своего текущего. Единственный запрос - это не Святой Грааль, чтобы преследовать любой ценой.

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