В настоящее время мы создаем веб-сайт с категоризованной таблицей MySQL, содержащей различные компетенции, и мы заметили, что модель для вложенного набора будет оптимизирована для этого. Хотя у нас есть довольно серьезная проблема - модель с вложенными множествами не допускает сортировки, и нам действительно нужна такая возможность.
Я хотел бы, чтобы выходные данные были массивом (идентификатор, имя, глубина) , поскольку эта функция поддерживает (хотя и без какой-либо сортировки):
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);
}
}
Любая помощь будет принята с благодарностью. Я гуглил разные способы сортировки данных из вложенных множеств, но без какого-либо хорошего результата.
Заранее спасибо.
РЕДАКТИРОВАТЬ : Сейчас я попробовал некоторые с функцией uasort (), которая кажется правильным, но проблема все еще остается.