Древовидный список
Есть запрос, вида:
Код: Выделить всё
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body><?php
// database access parameters
// alter this as per your configuration
$host = "192***";
$user = "user";
$pass = "123";
$db = "ST";
$table= "project";
// open a connection to the database server
$connection = pg_pconnect ("host=$host dbname=$db user=$user password=$pass");
if (!$connection)
{
die("Could not open connection to database server");
}
// generate and execute a query
WITH RECURSIVE search_graph(id, id_parent, name, org, date, depth, path, cycle) AS (
SELECT g.id, g.id_parent, g.name, g.org, g.date, 1,
ARRAY[g.id],
false
FROM graph g
UNION ALL
SELECT g.id, g.id_parent, g.name, g.org, g.date, sg.depth + 1,
path || g.id,
g.id = ANY(path)
FROM graph g, search_graph sg
WHERE g.id = sg.link AND NOT cycle
)
//SELECT * FROM search_graph;
//$query = "SELECT id,id_parent FROM $table ORDER BY id_parent";
$query = "SELECT * FROM search_graph";
$result = pg_query($connection, $query) or die("Error in query: $query.
" . pg_last_error($connection));
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
function print_tree(&$res, &$row, $lvl=1)
{ if ($row = pg_fetch_assoc($res)) {
if ($row['level'] = $lvl) {
echo '<ul>';
while ($row['level'] = $lvl) {
echo "<li>{$row['id']}"; -- описание, или что хотите отразить в списке (название)
print_tree($res, $row, $lvl+1); -- рекурсивно выводим поддерево текущего узла
echo '</li>';
}
echo '</ul>';
}
}
}
// и вызов:
$row = 0;
echo print_tree($result, $row);
// get the number of rows in the resultset
$rows = pg_num_rows($result);
echo "There are currently $rows records in the database.";
// close database connection
pg_close($connection);
?></body></html>
[/html]
Код: Выделить всё
WITH RECURSIVE search_graph(id, id_parent, name, org, date, depth, path, cycle) AS (
SELECT g.id, g.id_parent, g.name, g.org, g.date, 1,
ARRAY[g.id],
false
FROM graph g
UNION ALL
SELECT g.id, g.id_parent, g.name, g.org, g.date, sg.depth + 1,
path || g.id,
g.id = ANY(path)
FROM graph g, search_graph sg
WHERE g.id = sg.link AND NOT cycle
)
SELECT * FROM search_graph;
для вывода
Код: Выделить всё
[php]<?php
function print_tree(&$res, &$row, $lvl=1)
{ if ($row = pg_fetch_assoc($res)) {
if ($row['level'] = $lvl) {
echo '<ul>';
while ($row['level'] = $lvl) {
echo "<li>{$row['description']}"; -- описание, или что хотите отразить в списке (название)
print_tree($res, $row, $lvl+1); -- рекурсивно выводим поддерево текущего узла
echo '</li>';
}
echo '</ul>';
}
}
}
// и вызов:
$row = 0;
print_tree($result, $row);
?>[/php]
Помогите сделать эту менюшку. Я уже весь интернет облазил....


