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

Форум MySQL

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

 

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

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

тема: Универсальный каталог продукции
 
 автор: Mefisto84   (03.05.2006 в 18:40)   письмо автору
 
 

Здравствуйте! У меня возник вопрос по поводу универсального каталога продукции из Вашей книги. Скажите пожалуйста как можно узнать родителя? Самого, как это сказать, главного что ли, или самого первого. Ну вот к примеру, как у вас в книге:
id name id_parent
1 avto 0
2 toyota 1
3 corolla 2
как мне находясь в каталоге corolla, узнать id его самого первого родителя, то есть avto, т.е. функция мне должна вернуть значение 1.
Заранее благодарен.

   
 
 автор: cheops   (03.05.2006 в 22:26)   письмо автору
 
   для: Mefisto84   (03.05.2006 в 18:40)
 

Для таких вещей удобно использовать рекурсивные функции - передайте в качестве аргумента идентификатор подчинённого каталога следующей функции
<?php
  
function get_parent($id)
  {
    
$query "SELECT id, name, id_parent FROM tbl WHERE id = $id";
    
$tbl mysql_query($query);
    if(!
$tbl) exit("Ошибка при рекурсивном спуске");
    
$table mysql_fetch_array($tbl);
    if(
$table['id_parent'] == 0$result $table['name'];
    else 
$result get_parent($table['id_parent']);
    return 
$result;
  }
?>

и получите имя родительского каталога.

   
 
 автор: Mefisto84   (04.05.2006 в 11:12)   письмо автору
 
   для: cheops   (03.05.2006 в 22:26)
 

Спасибо. только скажите теперь пожалуйста как мне получить этот id, ну как мне его извлечь из этой функции? echo $result ? или как?

   
 
 автор: Trianon   (04.05.2006 в 11:35)   письмо автору
 
   для: Mefisto84   (04.05.2006 в 11:12)
 

Там, где рекурсия не нужна, она не нужна.
<?php 
  
function get_parent($id
  { 
    do
    {
        
$res $id;
        
$query "SELECT id_parent FROM tbl WHERE id = $id"
        
$res mysql_query($query); 
        if(!
$res) exit("Ошибка при подъеме к предку"); 
        
$id mysql_result($res0);
    }while(
$id != 0);
    return 
$res;
  }

  echo 
get_parent(2);

?> 

   
 
 автор: Mefisto84   (04.05.2006 в 12:18)   письмо автору
 
   для: Trianon   (04.05.2006 в 11:35)
 

не знаю, может я делаю чего не так? я когда приводил пример то написал имя поля id а на самом деле она называется id_catalog. И если я меняю в функции все id на id_catalog, вот к примеру так

     function get_parent($id_catalog) 
  { 
    do 
    { 
        $res = $id_catalog; 
        $query = "SELECT id_parent FROM catalog WHERE id_catalog = $id_catalog"; 
        $res = mysql_query($query); 
        if(!$res) exit("Ошибка при подъеме к предку"); 
        $id_catalog = mysql_result($res, 0); 
    }while($id_catalog!= 0); 
    return $res; 
  } 
echo get_parent(2);

То и та и эта функция возвращает мне вот такое вот значение Resource id #129, или Resource id #128 или еще какое-нибудь. В чем причина? Что не так? Может я в функции не те поля меняю? Или может быть не так вывожу? Я пробовал и так echo $res; . Все равно тот же самый результат.

   
 
 автор: Trianon   (04.05.2006 в 12:31)   письмо автору
 
   для: Mefisto84   (04.05.2006 в 12:18)
 

Прошу прощения. Это моя ошибка.

<?
  
function get_parent($id_catalog
  { 
    do 
    { 
        
$res $id_catalog
        
$query "SELECT id_parent FROM catalog WHERE id_catalog = $id_catalog"
        
$query_res mysql_query($query); 
        if(!
$query_res) exit("Ошибка при подъеме к предку"); 
        
$id_catalog mysql_result($query_res0); 
    }while(
$id_catalog!= 0); 
    return 
$res
  } 
echo 
get_parent(2);  
?>

   
 
 автор: Mefisto84   (04.05.2006 в 14:10)   письмо автору
 
   для: Trianon   (04.05.2006 в 12:31)
 

Большое спасибо, все заработало. Еще раз спасибо!

   
Rambler's Top100
вверх

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