SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.11.2010 16:48:08

MySQL-progress
Участник
Зарегистрирован: 22.11.2010
Сообщений: 11

Выборка url-пути из БД.

Добрый день.

Имеется таблица - структура сайта.

CREATE TABLE IF NOT EXISTS `stucture` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pid` int(11) NOT NULL,
  `title` char(32) NOT NULL,
  `url` char(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `pid` (`pid`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=56 ;

--
-- Дамп данных таблицы `stucture`
--

INSERT INTO `stucture` (`id`, `pid`, `title`, `url`) VALUES
(1, 0, 'Главная', ''),
(47, 43, 'Скачивание файла', 'download'),
(46, 43, 'Поиск по сайту', 'search'),
(6, 0, 'Студентам', 'students'),
(39, 6, 'Студенческий совет', 'studsovet'),
(38, 6, 'Работа для студентов', 'job'),
(37, 6, 'Учебно-методическое отделение', 'umo'),
(36, 6, 'Общежитие', 'hostel'),
(35, 6, 'Гранты и степендии', 'grants'),
(34, 6, 'Расписание', 'schedule'),
(40, 6, 'Форум', 'http://www.-forum.ru/'),
(41, 35, 'Вакансии', 'vacans'),
(42, 38, 'Резюме', 'rezum'),
(43, 0, 'Система', 'system'),
(45, 0, 'Новости', 'news'),
(48, 43, 'Авторизация', 'enter'),
(49, 43, 'Карта сайта', 'map'),
(50, 43, 'Страница не найдена', '404'),
(51, 43, 'Регистрация пользователя', 'user.reg'),
(52, 6, 'Главпочтамп', 'pochta'),
(54, 52, 'Студентам 2 - но со ссылкой stud', 'students'),
(55, 38, 'Вакансии 2 (ссылка vacans)', 'vacans');

При постоении дерева она принимает соответствующим вид на основе id и pid (родителя)
Создаю выбоку для адреса: http://mydom.ru/students/job/vacans.html

SELECT * , 'при условиии что pid = существуующему id в данном запросе (кроме 0)' AS 'tmp' FROM `stucture`
WHERE `url`
IN ('', 'students', 'job', 'vacans')
#GROUP BY `url`

ORDER BY `pid`
LIMIT 0 , 30


И здесь выводятся лишние папки с одинаковыми названиями в результате выполнения запроса - нарушая при этом структуру дерева. Как их отфильтровать в соответствии со структурой.

1 0  Главная   
6 0 Студентам (родитель)
38 6 Работа    (дочка)
41 35 Вакансии vacans (не существует в структуре - как отсетить?)
55 38 Вакансии 2 (ссылка vacans) vacans (дочка)
54 52 Студентам 2 - но со ссылкой stud students (не существует в структуре - как отсетить?)

----

Т.е. выводятся два лишни раздела - нарушая при этом структуру:
41 35 Вакансии vacans
54 52 Студентам 2 - но со ссылкой stud students
Как их автоматически отсеивать и зделать что-то вроде
при условиии что pid = существуующему id в данном запросе (кроме 0) - значит выводим строку?

Отредактированно MySQL-progress (22.11.2010 16:51:49)


Разработка сайтов на CMS TYPO3.
Контактный e-mail: i-litovan@yandex.ru

Неактивен

 

#2 22.11.2010 17:25:32

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Выборка url-пути из БД.

Подозреваю, что Вы хотите таки сделать полный обход дерева с наложением
условий. Одним запросом это не делается. Можете написать хранимую проце-
дуру, которая будет это делать рекурсивно. Ну или в коде приложения.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson