구체화 된 경로를 사용하여 SQl에 트리 구조를 저장하고 있습니다 (필자의 경우 MySQL 5.7). 슬래시로 구분 된 슬러그로 경로를 저장합니다. 필자가 읽은 모든 자습서에서는 경로를 기준으로 행을 정렬하여 올바른 순서로 추출하지만 경로의 일부분이 비슷한 접두어를 사용하는 경우 작동하지 않는 것으로 나타났습니다.SQL에서 구체화 된 경로를 올바르게 정렬하려면 어떻게합니까?
일부 예제 코드 : 이제
CREATE TABLE categories (
id int(11),
parent_id int(11) DEFAULT NULL,
slug varchar(255),
path varchar(255)
);
INSERT INTO categories VALUES
(1, null, 'foo', '/foo'),
(2, 1, 'bar', '/foo/bar'),
(3, null, 'foo-it', '/foo-it'),
(4, 3, 'boy', '/foo-it/boy');
, 경로 정렬 할 때 내가 잘못된 순서로 얻을 :
SELECT * FROM categories ORDER BY path;
출력이 나타납니다
+------+-----------+--------+-------------+
| id | parent_id | slug | path |
+------+-----------+--------+-------------+
| 1 | NULL | foo | /foo |
| 3 | NULL | foo-it | /foo-it |
| 4 | 3 | boy | /foo-it/boy |
| 2 | 1 | bar | /foo/bar |
+------+-----------+--------+-------------+
4 rows in set (0.00 sec)
이 때문에 야기 할을 - 대부분의 (모든?) 데이터 정렬에서 앞에 /.
미친 것은 유닉스 정렬 명령 줄 유틸리티가 옳은 일을합니다. 모든 경로를 파일에 저장하고 정렬하면 정확한 결과를 얻을 수 있습니다.
$ sort paths.txt
/foo
/foo/bar
/foo-it
/foo-it/boy
MySQL에서 트리를 올바르게 정렬 할 수있는 방법이 있습니까? 유닉스의 sort 유틸리티가하는 것과 같은 방식으로 정렬하려면? 아마도 다른 데이터 정렬 또는 무언가? 아니면 다른 속임수?
당신은'/'모든 경로를 끝낼 수 있었다. – Solarflare