Php 树遍历-排序结果如何?
我有一个简单的表形式,我使用树遍历分层获取数据 它工作得很好,但现在我需要添加一个新函数。我需要按数据库[rank]中新列中每行保存的值对每个级别的数据进行排序 我的桌子是:Php 树遍历-排序结果如何?,php,sorting,structure,Php,Sorting,Structure,我有一个简单的表形式,我使用树遍历分层获取数据 它工作得很好,但现在我需要添加一个新函数。我需要按数据库[rank]中新列中每行保存的值对每个级别的数据进行排序 我的桌子是: +----+-----+-----+-------+--------+------------+------+ | ID | LFT | RGT | DEPTH | PARENT | NAME | RANK | +----+-----+-----+-------+--------+------------+--
+----+-----+-----+-------+--------+------------+------+
| ID | LFT | RGT | DEPTH | PARENT | NAME | RANK |
+----+-----+-----+-------+--------+------------+------+
| 1 | 1 | 22 | 0 | 0 | Category | 10 |
| 2 | 2 | 15 | 1 | 1 | Fruit | 8 |
| 3 | 3 | 8 | 2 | 2 | Apples | 8 |
| 4 | 4 | 5 | 3 | 3 | Red | 5 |
| 5 | 6 | 7 | 3 | 3 | Green | 5 |
| 6 | 9 | 14 | 2 | 2 | Bannana | 9 |
| 7 | 10 | 11 | 3 | 6 | Long | 1 |
| 8 | 12 | 13 | 3 | 6 | Short | 2 |
| 9 | 16 | 21 | 1 | 0 | Vegetables | 9 |
| 10 | 17 | 18 | 2 | 9 | Carrots | 5 |
| 11 | 19 | 20 | 2 | 9 | Potatoes | 6 |
| 12 | 8 | 9 | 3 | 3 | Yellow | 10 |
+----+-----+-----+-------+--------+------------+------+
对于列表,我将使用以下脚本:
$lftrgt = mysql_fetch_assoc(mysql_query("SELECT name,lft,rgt,rank FROM myTable WHERE id='$id'"));
$result = mysql_query("SELECT * FROM myTable WHERE rgt < $lftrgt[rgt] AND lft > $lftrgt[lft] ORDER BY lft");
if(!$result) { echo mysql_error() . ' - ' . mysql_errno(); }
$depth = -1;
echo "<b><u>".$lftrgt[name] ." (rank: ". $lftrgt[rank] .")</u></b>";
while ($row = mysql_fetch_assoc($result)) {
if ($depth < $row["depth"]) {
echo "<ul>";
} else {
echo str_repeat("</li></ul>", $depth - $row["depth"]) . "</li>";
}
echo "<li>\n" . htmlspecialchars($row["name"]) ." (rank: " . $row[rank] . ")";
$depth = $row["depth"];
}
echo str_repeat("</li></ul>", $depth + 1) . "\n";
mysql_free_result($result);
$lftrgt=mysql\u fetch\u assoc(mysql\u查询(“从myTable中选择name、lft、rgt、rank,其中id='$id'));
$result=mysql\u查询(“从myTable中选择*,其中rgt<$lftrgt[rgt]和lft>$lftrgt[lft]按lft排序”);
if(!$result){echo mysql_error().-'.mysql_errno();}
$depth=-1;
回显“$lftrgt[name]”(排名:“$lftrgt[rank]”);
while($row=mysql\u fetch\u assoc($result)){
如果($depth<$row[“depth”]){
回声“”;
}否则{
echo str_repeat(“
”,$depth-$row[“depth”])。“”;
}
echo“\n”.htmlspecialchars($row[“name”])。”(排名:“$row[rank]”);
$depth=$row[“depth”];
}
echo str_repeat(“ ”,$depth+1)。“\n”;
mysql_free_result($result);
为了获得更好的想法,这里有我需要的图片:
如何按降序对每个级别的结果进行排序?谢谢。您可以将数据读入数组并使用进行排序。作为第一步,您应该将数据放入数据结构中,然后可以对其进行操作。为什么要使用长期不推荐的
mysql\ucode>代码库?它在许多年前就已经停止使用,并在PHP7中被完全删除。不应使用此库编写新代码。它使您容易受到SQL注入攻击(由于缺少参数化查询支持)和其他潜在的未修补漏洞的攻击。尽快切换到使用mysqli
或PDO
,然后学习如何编写参数化查询以保护数据免受恶意输入。有关风险的简单解释和安全编写查询的一些示例PHP代码,请参阅。