|
|
|
|
|
для: Trianon
(10.12.2007 в 18:15)
| | Trianon, большое человеческое спасибо - разложили по полочкам! | |
|
|
|
|
|
|
|
для: mihdan
(10.12.2007 в 17:56)
| | так а способов-то на самом деле немного.
1. В лоб - тот, что привели Вы. Простой и надежный как топор. Но слегка медленный и запросов много.
2. Если элементов дерева не запредельное количество - можно взять всё дерево одним запросом, и дальше ходить по нему, не обращаясь к SQL-серверу. Быстр, чуть прожорлив по затратам памяти.
3. построить запрос-цепочку LEFT JOIN самосоединений (с алиасами узлов) и схватить весь путь одним запросом.
работает только если предельная длина цепочки ограничена (32 или около того... впрочем эта константа зависит от настроек, а её предел - от версии MySQL) Быстр и экономен, но имееет формальное ограничение, на практике недостижимое. | |
|
|
|
|
|
|
|
для: mihdan
(10.12.2007 в 14:03)
| | Ответа недождался - пришлось сделать самому. Спасибо.
<?
$pid = ((isset($_GET['pid'])) && (!empty($_GET['pid'])) && ((int)$_GET['pid'] == $_GET['pid'])) ? (int)$_GET['pid'] : 0;
$glue = ' / ';
// Ссылки-цепочки
while($pid != 0) {
$query = "
SELECT *
FROM `tree`
WHERE id=$pid
";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$pid = $row['pid'];
$names[] = "<a href='?pid={$row['pid']}&level={$row['id']}'>{$row['name']}</a>";
}
// Если сформировался массив - выведем ссылки
if (is_array($names)) {
$names = $glue.implode($glue, array_reverse($names));
echo $names;
}
?>
|
| |
|
|
|
|
|
|
| помогите идеями, ссылками, кодом, как грамотно реализовать навигационную цепочку типа вот такого:
Главная -> О компании -> Схема проезда
table tree
id | pid | name | content
|
ссылки вида ?level=id&level1=pid | |
|
|
|
|