我们目前正在构建一个网站,其中包含一个包含各种能力的分类 MySQL 表,我们注意到嵌套集模型将为此进行优化。虽然,我们遇到了一个非常严重的问题——嵌套集合模型不允许任何排序,我们确实需要这种可能性。我希望输出数据是array(id, name, depth),因为这个函数支持(虽然没有任何排序):
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() 函数尝试了一些感觉是正确的方法,但问题仍然存在。