Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ссылки-цепочки
 
 автор: mihdan   (10.12.2007 в 14:03)   письмо автору
 
 

помогите идеями, ссылками, кодом, как грамотно реализовать навигационную цепочку типа вот такого:
Главная -> О компании -> Схема проезда

table tree

id | pid | name | content


ссылки вида ?level=id&level1=pid

   
 
 автор: mihdan   (10.12.2007 в 17:56)   письмо автору
 
   для: 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($gluearray_reverse($names));
                echo 
$names;
            }
            
?>

   
 
 автор: Trianon   (10.12.2007 в 18:15)   письмо автору
 
   для: mihdan   (10.12.2007 в 17:56)
 

так а способов-то на самом деле немного.
1. В лоб - тот, что привели Вы. Простой и надежный как топор. Но слегка медленный и запросов много.
2. Если элементов дерева не запредельное количество - можно взять всё дерево одним запросом, и дальше ходить по нему, не обращаясь к SQL-серверу. Быстр, чуть прожорлив по затратам памяти.
3. построить запрос-цепочку LEFT JOIN самосоединений (с алиасами узлов) и схватить весь путь одним запросом.
работает только если предельная длина цепочки ограничена (32 или около того... впрочем эта константа зависит от настроек, а её предел - от версии MySQL) Быстр и экономен, но имееет формальное ограничение, на практике недостижимое.

   
 
 автор: mihdan   (10.12.2007 в 18:20)   письмо автору
 
   для: Trianon   (10.12.2007 в 18:15)
 

Trianon, большое человеческое спасибо - разложили по полочкам!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования