Я использую php для создания каталога дерева каталогов. Каталог (данные) взяты из таблицы базы данных MySQL, но я не имею понятия, чтобы написать SQL, чтобы получить записи с того, я хочу:Создание дерева каталогов с SQL в MySQL
Создание SQL таблицы:
CREATE TABLE section (
section_id tinyint(4) NOT NULL auto_increment,
name varchar(500) default NULL,
parent_id tinyint(4) default NULL,
lineage varchar(45) default NULL,
level tinyint(4) default NULL,
PRIMARY KEY (section_id)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;
а также вставить SQL данных:
INSERT INTO section (
section_id,name,lineage,parent_id,level)
VALUES
('1', 'Dashboard', '1', '0', '1'),
('2', 'Slider', '2', '0', '1'),
('3', 'Column', '3', '0', '1'),
('4', 'Column list', '3-4', '3', '2'),
('5', 'Add column', '3-5', '3', '2'),
('6', 'Permission', '6', '0', '1'),
('7', 'Permission Group', '6-7', '6', '2'),
('8', 'User List', '6-8', '6', '2'),
('9', 'Section permission', '6-9', '6', '2'),
('10', 'Add permission', '6-7-10', '7', '3'),
('11', 'Add user', '6-8-11', '8', '3'),
('12', 'Add section', '6-9-12', '9', '3');
Все записи таблицы, которые создали:
section_id name parent_id level
-----------------------------------------------------
1 Dashboard 0 1
2 Slider 0 1
3 Column 0 1
4 Column list 3 2
5 Add column 3 2
6 Permission 0 1
7 Permission Group 6 2
8 User List 6 2
9 Section permission 6 2
10 Add permission 7 3
11 Add user 8 3
12 Add section 9 3
Я бы хотел использовать/некоторую SQL получить строки в следующем порядке:
section_id name parent_id level
-----------------------------------------------------
1 Dashboard 0 1
2 Slider 0 1
3 Column 0 1
4 Column list 3 2
5 Add column 3 2
6 Permission 0 1
7 Permission Group 6 2
10 Add permission 7 3
8 User List 6 2
11 Add user 8 3
9 Section permission 6 2
12 Add section 9 3
Для создания этого дерева каталогов:
- Dashboard
- Slider
- Column
- Column list
- Add column
- Permission
- Permission Group
- Add permission
- User List
- Add user
- Section permission
- Add Section
У меня есть идея, используя много SQL, чтобы получить каталоги и магазин данные в php-объект. И это SQL, чтобы получить подкаталог:
SELECT * FROM tbl_section AS a1 WHERE a1.parent_id = 0;
SELECT * FROM tbl_section AS a1 WHERE a1.parent_id = 1;
SELECT * FROM tbl_section AS a1 WHERE a1.parent_id = 2;
SELECT * FROM tbl_section AS a1 WHERE a1.parent_id = 3;
и так далее.
Тем не менее, ему нужно запустить select sql 100 раз, если существует 100 каталогов, Я не думаю, что это хороший метод, любая другая идея?
Как вы обнаруживаете, реляционные базы данных пытаются моделировать иерархические или древовидные структуры данных. Фактически, это один из самых сложных и технических вопросов в этой области (http://stackoverflow.com/questions/4048151/what-are-the-options-for-storing-hierarchical-data-in-a- реляционные базы данных). –
Спасибо за ваш комментарий, и я нашел способ работает для меня по вашей ссылке.Хотя это может быть не самый динамичный способ, но он работает для меня. Возможно, я вставляю это в качестве ответа на вопрос для общественности. – user2446447
@BaconBits: на самом деле это не так сложно, если вы не используете MySQL, который является одной из немногих реляционных баз данных, которые все еще не поддерживают рекурсивные запросы. –