Mysql Сортировка по трем столбцам с вложением

dmvlad

Новичок
Помогите, пожалуйста, разобраться с сортировкой

Есть такая таблица
Код:
CREATE TABLE IF NOT EXISTS `tag` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(50) CHARACTER SET utf8 NOT NULL,
  `sort` tinyint(4) NOT NULL DEFAULT '0',
  `parent_id` int(9) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

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

INSERT INTO `tag` (`id`, `title`, `sort`, `parent_id`) VALUES
(1, 'Россия', 1, 0),
(2, 'Балашиха', 1, 4),
(3, 'Германия', 2, 0),
(4, 'Московская область', 1, 1),
(5, 'Тульская область', 2, 1),
(6, 'Химки', 2, 4),
(7, 'Алексин', 1, 5),
(8, 'Тула', 1, 5),
(9, 'Мюнхен', 1, 3);
Хочу ее отсортировать по логике, делаю так
Код:
SELECT t1.sort AS sort1, t2.sort AS sort2, t3.sort AS sort3, t1.title AS title1, t2.title AS title2, t3.title AS title3
FROM  `tag` t3
LEFT JOIN tag t2 ON ( t3.parent_id = t2.id )
LEFT JOIN tag t1 ON ( t2.parent_id = t1.id )
ORDER BY sort1, sort2, sort3, title3
LIMIT 0 , 30
но выходит не то
Код:
Россия
Германия
Московская область
Тульская область
Мюнхен
Балашиха
Химки
Алексин
Тула
Надо чтобы было так
Код:
Россия
Московская область
Балашиха
Химки
Тульская область
Алексин
Тула
Германия
Мюнхен
 

SSecurity

Новичок
SQL:
SELECT t2.title,t1.title,t0.title,
case
  when t0.parent_id = 0 then concat(t0.title,'>',t1.title,'>',t2.title)
  when t1.parent_id = 0 then concat(t1.title,'>',t2.title)
  when t2.parent_id = 0 then concat(t2.title)
end as adr,
case
  when t0.parent_id = 0 then t0.sort
  when t1.parent_id = 0 then t1.sort
  when t2.parent_id = 0 then t2.sort
end as sort1,
case
  when t0.parent_id = 0 then t1.sort
  when t1.parent_id = 0 then t2.sort
end as sort2,
case
  when t0.parent_id = 0 then t2.sort
end as sort3
FROM `tag` t2
LEFT JOIN tag t1 ON ( t1.id = t2.parent_id )
LEFT JOIN tag t0 ON ( t0.id = t1.parent_id )
order by sort1,sort2,sort3,t2.title
LIMIT 0 , 30
Код:
Россия
Московская область
Балашиха
Химки
Тульская область
Алексин
Тула
Германия
Мюнхен
 

WMix

герр M:)ller
Партнер клуба
Странно что хочешь сортировать по 3м а выводить одно. Плохо когда не вывел все три поля, не поняв, что по всем трем действительно отсортировано, и то что ты хочешь, оказывается не дефинированным поведением

Попробуй 3 раза москва, и два одинаковых значения во втором столбце
 
Сверху