В моем приложении у меня есть структурированная таблица дерева, и я хочу знать, что если я могу получить данные древовидной структуры из базы данных sqlite, просто применяя один запрос. В настоящее время я обрабатываю его вручную, используя цикл for и способный удовлетворить мои требования, но я не уверен, что этот подход более сложный, может потребовать много времени и т. Д.
Моя таблица выглядит так:
parent_id | cat_id null | 1 1 | 2 1 | 3 1 | 4 4 | 5 4 | 6
Итак, теперь выше моя структура таблицы, и я хочу получить древовидную структуру, например: если я передам parent_id как 1
в моем запросе, тогда он должен вернуть 2,3,4,5,6
поскольку 1
является родителем 1, 2, 3, 4
и 4
является родителем 5,6
а также 4
является дочерним по 1
Таким образом, ожидаемый мной ввод и вывод,
input output 1 2,3,4,5,6 4 5, 6
Итак, есть ли простой способ получить эту древовидную структуру с помощью SQL-запроса?
ИЛИ
Невозможно выполнить этот запрос с использованием SQL-запроса, и мне нужно следовать текущему методу или способу, которым я его использую, вручную перебирая все идентификаторы категорий.
Вы можете использовать метод group_concat, поскольку он доступен в sqlite.
Для вашего вопроса я создал одну таблицу под названием Trans
и добавил parent_id
и cat_id
.
select parent_id, group_concat(cat_id) from trans group by parent_id;
У меня есть таблица, подобная этой, о которой я упомянул ниже.
И я получил результат следующим образом:
Надеюсь, что это поможет вам.
Я не нашел никакого решения из самого sqlite, поэтому создал Алгоритм, который создает структуру Tree, итерируя по каждому id и над ее sub_ids и записывая в базу данных.
Я прошел через Closure Tables, который дает ожидаемый результат, который я рассматривал как решение
Еще несколько ссылок на таблицу Closure –
http://technobytz.com/closure_table_store_hierarchical_data.html http://karwin.blogspot.in/2010/03/rendering-trees-with-closure-tables.html