Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 树遍历-排序结果如何?_Php_Sorting_Structure - Fatal编程技术网

Php 树遍历-排序结果如何?

Php 树遍历-排序结果如何?,php,sorting,structure,Php,Sorting,Structure,我有一个简单的表形式,我使用树遍历分层获取数据 它工作得很好,但现在我需要添加一个新函数。我需要按数据库[rank]中新列中每行保存的值对每个级别的数据进行排序 我的桌子是: +----+-----+-----+-------+--------+------------+------+ | ID | LFT | RGT | DEPTH | PARENT | NAME | RANK | +----+-----+-----+-------+--------+------------+--

我有一个简单的表形式,我使用树遍历分层获取数据

它工作得很好,但现在我需要添加一个新函数。我需要按数据库[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代码,请参阅。