Задать вопрос

Сортировка при «рекурсии» в Mysql?

Написала запрос вместе с процедурой и функцией. Он работает, но вот не могу сообразить как его можно отсортировать по id. Сортировка как бы идет, но идет она как строка и получается что сразу после 10 идет 100 и только потом 11.
DROP PROCEDURE IF EXISTS getpath;
DELIMITER $$
CREATE PROCEDURE getpath(IN cat_id INT, OUT path TEXT)
BEGIN
  DECLARE catname VARCHAR(250);
  DECLARE temppath TEXT;
  DECLARE tempparent INT;
  SET max_sp_recursion_depth = 255;
  SELECT name, parent_id FROM menu WHERE id=cat_id INTO catname, tempparent;
  IF tempparent IS NULL
  THEN
    SET path = cat_id;
  ELSE
    CALL getpath(tempparent, temppath);
    SET path = CONCAT(temppath, '/', cat_id);
  END IF;
END$$
DELIMITER ;

DROP FUNCTION IF EXISTS getpath;
DELIMITER $$
CREATE FUNCTION getpath(cat_id INT) RETURNS TEXT DETERMINISTIC
BEGIN
  DECLARE res TEXT;
  CALL getpath(cat_id, res);
  RETURN res;
END$$
DELIMITER ;

SELECT DISTINCT p.id, m.id, m.name, m.link, m.type, getpath(m.id) AS path, p.title, p.active, p.created_at
FROM menu m
  LEFT JOIN page p ON p.route=m.link
ORDER BY path;


Как можно модифицировать запрос для этого?
  • Вопрос задан
  • 71 просмотр
Подписаться 2 Средний 11 комментариев
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
"10" < "100" < "11"
10 < 11 < 100
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы