Royal Flash
-=MaestrO=-
Древовидная структура - запросы.
Есть таблица древовидной структуры меню сайта, код и данные приведены ниже. Поскольку я не силен в запросах к БД никак не могу составить запрос к базе на вывод из нее определенного (например в переменной $menu_level) кол-ва меню и подменю. Например, необходимо вывести все меню с level = 1, level = 2 и level = 3. Насколько я понял необходимо объеденение таблицы самой с собой, вот только как это сделать? Рекурсия не интересует, нужен именно универсальный SQL запрос. Буду благодарен за любые ссылки на интересующую меня тему, про готовый пример SQL запрса я промолчу
CREATE TABLE `menu` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`number` tinyint(2) unsigned NOT NULL default '0',
`parent` smallint(5) unsigned NOT NULL default '0',
`level` tinyint(2) unsigned NOT NULL default '0',
`tmp` tinyint(2) NOT NULL default '0',
`name` varchar(55) NOT NULL default '',
`tуmp` varchar(32) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM;
number - порядковый номер меню или подменю, по которому сортируется меню и все подменю.
level - можно обойтись и без этого столбца, вот только для начала, для упрощения понимания и работы с БД, он мне необходим - места в базе занимает очень мало.
На поля tmp и tymp просьба внимания не обращать.
#
# Дамп данных таблицы `menu`
#
INSERT INTO `menu` VALUES (1, 1, 0, 1, 1, 'О нас', '0');
INSERT INTO `menu` VALUES (5, 1, 1, 2, 1, 'сотрудники', 'sotr');
INSERT INTO `menu` VALUES (6, 2, 1, 2, 1, 'структура', 'struct');
INSERT INTO `menu` VALUES (2, 2, 0, 1, 1, 'портфолио', '0');
INSERT INTO `menu` VALUES (7, 1, 2, 2, 1, 'web', '0');
INSERT INTO `menu` VALUES (9, 1, 7, 3, 1, 'дизайн', 'design');
INSERT INTO `menu` VALUES (10, 2, 7, 3, 1, 'прогр.', '0');
INSERT INTO `menu` VALUES (11, 1, 10, 4, 1, 'PHP', 'php');
INSERT INTO `menu` VALUES (12, 2, 10, 4, 1, 'ASP', 'asp');
INSERT INTO `menu` VALUES (8, 2, 2, 2, 1, 'полиграфия', 'polyg');
INSERT INTO `menu` VALUES (3, 3, 0, 1, 1, 'цены', 'price');
INSERT INTO `menu` VALUES (4, 4, 0, 1, 1, 'контакты', 'contacts');
Есть таблица древовидной структуры меню сайта, код и данные приведены ниже. Поскольку я не силен в запросах к БД никак не могу составить запрос к базе на вывод из нее определенного (например в переменной $menu_level) кол-ва меню и подменю. Например, необходимо вывести все меню с level = 1, level = 2 и level = 3. Насколько я понял необходимо объеденение таблицы самой с собой, вот только как это сделать? Рекурсия не интересует, нужен именно универсальный SQL запрос. Буду благодарен за любые ссылки на интересующую меня тему, про готовый пример SQL запрса я промолчу
CREATE TABLE `menu` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`number` tinyint(2) unsigned NOT NULL default '0',
`parent` smallint(5) unsigned NOT NULL default '0',
`level` tinyint(2) unsigned NOT NULL default '0',
`tmp` tinyint(2) NOT NULL default '0',
`name` varchar(55) NOT NULL default '',
`tуmp` varchar(32) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM;
number - порядковый номер меню или подменю, по которому сортируется меню и все подменю.
level - можно обойтись и без этого столбца, вот только для начала, для упрощения понимания и работы с БД, он мне необходим - места в базе занимает очень мало.
На поля tmp и tymp просьба внимания не обращать.
#
# Дамп данных таблицы `menu`
#
INSERT INTO `menu` VALUES (1, 1, 0, 1, 1, 'О нас', '0');
INSERT INTO `menu` VALUES (5, 1, 1, 2, 1, 'сотрудники', 'sotr');
INSERT INTO `menu` VALUES (6, 2, 1, 2, 1, 'структура', 'struct');
INSERT INTO `menu` VALUES (2, 2, 0, 1, 1, 'портфолио', '0');
INSERT INTO `menu` VALUES (7, 1, 2, 2, 1, 'web', '0');
INSERT INTO `menu` VALUES (9, 1, 7, 3, 1, 'дизайн', 'design');
INSERT INTO `menu` VALUES (10, 2, 7, 3, 1, 'прогр.', '0');
INSERT INTO `menu` VALUES (11, 1, 10, 4, 1, 'PHP', 'php');
INSERT INTO `menu` VALUES (12, 2, 10, 4, 1, 'ASP', 'asp');
INSERT INTO `menu` VALUES (8, 2, 2, 2, 1, 'полиграфия', 'polyg');
INSERT INTO `menu` VALUES (3, 3, 0, 1, 1, 'цены', 'price');
INSERT INTO `menu` VALUES (4, 4, 0, 1, 1, 'контакты', 'contacts');