Обход дерева - как сортировать результаты? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть простая форма таблицы, в которой я получаю данные иерархически с помощью обхода дерева.

Это хорошо работает, но теперь мне нужно добавить новую функцию.Мне нужно отсортировать данные на каждом уровне по значению, сохраненному для каждой строки в новом столбце в базах данных [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); 

Для лучшей идеи есть картинка, которая мне нужна:

screenshot

Как отсортировать результаты на каждом уровне в порядке убывания?Благодаря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...