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

  • Автор темы Автор темы dmvlad
  • Дата начала Дата начала

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

но выходит не то
Код:
Россия
Германия
Московская область
Тульская область
Мюнхен
Балашиха
Химки
Алексин
Тула

Надо чтобы было так
Код:
Россия
Московская область
Балашиха
Химки
Тульская область
Алексин
Тула
Германия
Мюнхен
 
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

Код:
Россия
Московская область
Балашиха
Химки
Тульская область
Алексин
Тула
Германия
Мюнхен
 
Странно что хочешь сортировать по 3м а выводить одно. Плохо когда не вывел все три поля, не поняв, что по всем трем действительно отсортировано, и то что ты хочешь, оказывается не дефинированным поведением

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