Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Есть запрос где каждая строка связана с другой столбиком id_parent и одинаковые id_parent отсортированы по полю sort. Нужно вывести сперва id_parent=0 с сортировкой sort, но не все с одинаковым id_parent, а внутри дочерние, у которых id_parent = текущей id.
Вот сама таблица
CREATE TABLE IF NOT EXISTS `tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` text NOT NULL,
`id_parent` int(11) NOT NULL DEFAULT '0',
`sort` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `id_parent` (`id_parent`),
FULLTEXT KEY `name_main` (`title`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=112 ;
--
-- Дамп данных таблицы `tbl`
--
INSERT INTO `tbl` (`id`, `title`, `id_parent`, `sort`) VALUES
(19, 'Автомобили', 0, 67),
(25, 'Лада', 19, 7),
(27, 'Казань', 94, 4),
(30, 'Волга', 19, 2),
(59, 'Цвета', 0, 4),
(60, 'Красный', 59, 9),
(63, 'Синий', 59, 5),
(94, 'Города', 0, 3),
(109, 'Москва', 94, 1),
(110, 'ГАЗ 3102', 30, 0),
(111, 'ГАЗ 3110', 30, 0);
Делают так:
SELECT t1 . *
FROM `tbl` t1
LEFT JOIN tbl t2 ON ( t2.id = t1.id_parent )
ORDER BY t1.id_parent, t1.sort, t2.id_parent, t2.sort
Но выводит только сортировку пока все id_parent =0 и т.д., т.е. по одному полю только корректно сортирует.
В идеале вывести так:
id title title_parent
т.е. результат должен быть такой
94 Города 0 3
-109 Москва 94 1
-27 Казань 94 4
59 Цвета 0 4
-63 Синий 59 5
-60 Красный 59 9
19 Автомобили 0 67
-30 Волга 19 2
--110 ГАЗ 3102 30 0
--111 ГАЗ 3110 30 0
-25 Лада 19 7
Неактивен
MySQL, к сожалению, не имеет встроенных средств для рекурсивной работы. Так что одним простым запросом этого
не сделать. Почитайте http://webew.ru/articles/2080.webew
Неактивен
Большое спасибо за ответ!
Неактивен
Страниц: 1