gpt4 book ai didi

PHP:对嵌套集中的数据进行排序

转载 作者:行者123 更新时间:2023-11-30 21:24:21 24 4
gpt4 key购买 nike

我们目前正在构建一个包含各种权限的分类 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() 函数,感觉是正确的方法,但问题仍然存在。

最佳答案

如果您需要对树中的一组节点进行排序,并在树中保持无限数量的级别,我是否可以推荐使用预先排序的树遍历?

参见 http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/示例实现。

重点是您为每个节点维护一个左右值。您还可以为每个节点维护一个深度列,它告诉您它在树的哪个级别。您可以使用这些左值和右值按节点在树中的顺序对节点进行排序,并使用深度值仅选择给定的树的层数。

这种方法唯一值得注意的缺点是,您必须在更改节点结构时主动维护这些左右值。

关于PHP:对嵌套集中的数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/872904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com