에 숫자로 구분 된 문자열을 주문하는 방법 : 예를 1
을 위해 :이 숫자는 트리를 정의하는 데 사용됩니다SQL
1
1.1
1.1.1
1.2
1.2.1
1.10
2
2.1
을 2
은 최상위 노드이며 1.1
, 1.2
및 1.10
은 1
의 직계 하위 항목입니다. 트리는 임의로 깊을 수 있으므로 각 항목에있는 기간의 수에 상한이 없습니다 (실제로 열에 글자 수 제한이 적용됩니다).
문제점은 SQL에서 표준 ORDER BY
작업이 1.10
보다 앞에 표시되고 1.2
보다 우선합니다. 이것은 당연히 예상되지만, 불행히도 내가 원하는 바가 아닙니다. 10 > 2
부터. 주문하는 효율적인 방법이 있습니까? MySQL을 사용하고 있습니다.
트리에 대해이 인코딩을 사용하는 것이 반드시 필요한 것은 아니므로 제안하기가 쉽지 않은 다른 인코딩이 있으면 그렇게하는 것이 좋습니다. 그러나이 구조가 제공하는 좋은 점은 한 패스에서 모든 상위 부모 노드 또는 모든 하위 노드를 쉽게 복구 할 수 있다는 것입니다.이 노드는보다 일반적인 행/parent_row 모델에서 작동하는 것이 아닙니다 (멀리까지 내가 아는 한). 예를 들어, ID가 1.2.1.4.5
인 경우 네 개의 조상은 1
, 1.2
, 1.2.1
및 1.2.1.4
이며 모든 자식 (직계 하위 항목과 하위 항목 모두)의 ID는 1.2.1.4.5.
으로 시작합니다.
트리가 얼마나 깊습니까? 얼마나 많은 최상위 노드? 상한도 없습니까? – Riyono
"더 나은"구조체에 대한이 질문을보십시오. http://stackoverflow.com/questions/5916482/php-mysql-best-tree-structure –
@Riyono : 실제로 나무는 10 레벨보다 깊어지지 않을 것입니다. – Abiel