|
|
|
| Здравствуйте! У меня возник вопрос по поводу универсального каталога продукции из Вашей книги. Скажите пожалуйста как можно узнать родителя? Самого, как это сказать, главного что ли, или самого первого. Ну вот к примеру, как у вас в книге:
id name id_parent
1 avto 0
2 toyota 1
3 corolla 2
как мне находясь в каталоге corolla, узнать id его самого первого родителя, то есть avto, т.е. функция мне должна вернуть значение 1.
Заранее благодарен. | |
|
|
|
|
|
|
|
для: 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;
}
?>
|
и получите имя родительского каталога. | |
|
|
|
|
|
|
|
для: cheops
(03.05.2006 в 22:26)
| | Спасибо. только скажите теперь пожалуйста как мне получить этот id, ну как мне его извлечь из этой функции? echo $result ? или как? | |
|
|
|
|
|
|
|
для: 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($res, 0);
}while($id != 0);
return $res;
}
echo get_parent(2);
?>
|
| |
|
|
|
|
|
|
|
для: 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; . Все равно тот же самый результат. | |
|
|
|
|
|
|
|
для: 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_res, 0);
}while($id_catalog!= 0);
return $res;
}
echo get_parent(2);
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(04.05.2006 в 12:31)
| | Большое спасибо, все заработало. Еще раз спасибо! | |
|
|
|