Поворот данных в несколько строк в один столбец - PullRequest
0 голосов
/ 13 июня 2011

У меня есть таблица базы данных с категориями для различных продуктов.Каждая категория имеет только одного родителя, и каждый продукт может иметь несколько категорий.Мне нужно создать своего рода навигационную систему для переноса данных, но я не могу понять, как отобразить данные, чтобы у меня не было тонн запросов.

База данных настроена так:1003 *

id     category              sort     parent
1      Home                  0        0
58     Car & Truck           4        1
135    10' Wide Shelters     0        58

Теперь мне нужно вернуть данные так: Home/Car & Truck/10' Wide Shelters.

Возможно ли это с чистым SQL или мне нужно добавить ColdFusion, чтобы получить его.Если я смогу сделать это с помощью чистого SQL, то как я это сделаю, а если не смогу, как будет выглядеть ColdFusion?

Ответы [ 2 ]

0 голосов
/ 14 июня 2011

Используя вложенные наборы, как рекомендовано пользователем 349433, я смог ответить на этот запрос

SELECT c1.id AS id1, c1.category AS name1, c2.id AS id2, c2.category AS name2, c3.id AS id3, c3.category AS name3, c4.id AS id4, c4.category AS name4, c5.id AS id5, c5.category AS name5
FROM category c1
LEFT JOIN category AS c2 ON c2.parentid = c1.id
LEFT JOIN category AS c3 ON c3.parentid = c2.id
LEFT JOIN category AS c4 ON c4.parentid = c3.id
LEFT JOIN category AS c5 ON c5.parentid = c4.id

Мои данные никогда не идут глубже, чем на 5 уровней (я проверил, проверив с6 и получив нулевые значения). Отсюда я могу запросить против этого

SELECT (name1 + '/' + name2 + '/' + name3 + '/' + name4 + '/' + name5) AS category
FROM getCats
WHERE
    <cfloop query="Arguments.assignments">
        (id1 = #Arguments.assignments.categoryid# OR id2 = #Arguments.assignments.categoryid# OR id3 = #Arguments.assignments.categoryid# OR id4 = #Arguments.assignments.categoryid# OR id5 = #Arguments.assignments.categoryid#)
        <cfif Arguments.assignments.currentrow IS NOT Arguments.assignments.recordCount> OR </cfif>
    </cfloop>

У меня уже был запрос продуктов и идентификаторов их категорий для повторения.

0 голосов
/ 13 июня 2011

Другие СУБД поддерживают различные способы решения этой проблемы (рекурсивные with в ANSI SQL, connect by в Oracle и т. Д.). Но в MySQL у вас в значительной степени осталось вложенных множеств .

...