현재 다양한 역량을 포함하는 분류 된 MySQL 테이블이있는 웹 사이트를 구축하고 있으며 중첩 된 세트 모델이이를 위해 최적화되어 있음을 발견했습니다. 꽤 심각한 문제가 있습니다. 중첩 된 세트 모델은 어떤 정렬도 허용하지 않으며, 우리는 실제로 그 가능성을 필요로합니다. 나는이 기능을 지원하는 등, 배열 (ID, 이름, 깊이)로 출력 데이터를 싶습니다 (정렬 모든 종류의하지 않고 있지만) :PHP : 중첩 세트의 데이터 정렬
function tree()
{
$query = 'SELECT node.id, node.name, (COUNT(parent.name) - 1) AS depth FROM test_competence AS node, test_competence AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.name ORDER BY node.lft';
$result = mysql_query($query) or die(mysql_error());
while($data = mysql_fetch_assoc($result))
{
$returnarray[] = $data;
}
return $returnarray;
}
나는 기능을 시작했지만이 한 계속하는 방법을 모른다 :
function tree_sorted()
{
//Get data
$query = 'SELECT node.id, node.name, node.parent, (COUNT(parent.name) - 1) AS depth FROM test_competence AS node, test_competence AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.name ORDER BY node.lft';
$result = mysql_query($query) or die(mysql_error());
//Fetch gotten data
while($data = mysql_fetch_assoc($result))
{
$fetched[$data['depth']][$data['id']] = array($data['name'], $data['parent']);
}
//Sort fetched data
foreach($fetched as $i => $row)
{
asort($row);
$sorted[$i] = $row;
}
//Merge sorted data (???)
foreach($sorted as $i => $arr)
{
foreach($arr as $x => $row)
{
$returnarray[] = array('id' => key($row), 'name' => $row[0], 'depth' => $x);
}
}
어떤 도움을 주시면 감사하겠습니다. 중첩 된 집합에서 데이터를 정렬하는 여러 가지 방법에 대해 봤지만 아무런 결과가 없었습니다.
미리 감사드립니다.
EDIT : 지금 올바른 방법이라고 생각되는 uasort() 함수를 사용해 보았지만 문제는 여전히 남아 있습니다.
사소한 점으로, 암묵적인 것보다는 SQL에 명시적인 JOIN을 권하고 싶습니다. – staticsan