2011-01-14 2 views
3

Я хотел бы создать хлебную крошку из перечислимого столбца пути.Перечисление пути mySQL Querying для создания хлебной крошки

Вот пример набора данных, который у меня есть.

https://spreadsheets.google.com/ccc?key=0AsGYQbeSAIgFdGRscFpsZFJpQUtfWGIwYWNUY2ktRHc&hl=en_GB&authkey=CPOuuogF

idwoeidparent_woeidcountry_codenamelanguageplace_typeancestry

родословной есть перечисленные пути, такие как 1/23424975/24554868/12602167/12696151 путь для Брайтона в Англии.

Я хотел был бы иметь возможность retreive breadcrumb путем спрашивать колонку name, и получить все из родителей.

ie. Мир, Европа, Англия, [округ], [Город], [Регион], [Место]

([] = a placeholder)

данные никогда не меняется, поэтому эта таблица использует список смежности и путь перечисление.

ответ

5

Несколько возможных подходов. Я пойду от того, что вы хотите сделать, к тому, что я вам предлагаю.

Материализованного Путь

К сожалению, перечисленный путь происхождение (например, происхождение) is expensive and tricky to do with SQL only (смотрите раздел материализовались Path найти "An employee FORD and chain of his supervisors"). Если у вас есть путь впереди время и можете работать с каким-то языком программирования, самый простой подход заключается в использовании IN пункта:

SELECT * 
FROM woe 
WHERE ancestry IN (
    '1', 
    '1/23424975', 
    '1/23424975/24554868', 
    '1/23424975/24554868/12602167', 
    '1/23424975/24554868/12602167/12696151' 
) 
ORDER BY LEN(ancestry) 

Список смежность

Или, вы можете воспользоваться списком смежности а также использовать выражение Common Table или CONNECT BY вместо этого в зависимости от базы данных (это игнорирует столбец ancestry). См. Мой вопрос о различных способах использования representing hierarchical data in an RDBMS для получения информации о работе с списком Adjacency для запроса предка (см. Раздел «Примечания к базе данных» в конце вопроса).

Nested Set

Вы пишете ваши данные не изменяются и вы хотите запросить родословную. Вложенное представление множества - идеальный подход в этой ситуации, потому что получение информации, которую вы хотите с помощью SQL, просто, работает с любой базой данных и очень дешево. Даунсайд - это ходы, а вставки стоят дорого. Managing Hierarchical Data in MySQL, вероятно, лучшее объяснение, которое я могу предоставить, как это работает.

Nested Set является то, что я хотел бы использовать учитывая ваши данные, что вы хотите сделать, и что она не изменится.

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

  • Нет связанных вопросов^_^