PDA

View Full Version : یک مشکل با توابع خودفراخوان



tabib_m
سه شنبه 22 فروردین 1385, 19:57 عصر
با سلام
فرض کنید یک تیبل (در دیتابیس مای اس کیو ال) داریم با فیلد های زیر :

id
title
parent_id

در اینجا من یک سری عناوین دارم که هر کدوم از عناوین ممکنه زیر شاخه ای از یک عنوان دیگه داره.
همونطور که میبینید من برای این که مشخص کنم هر عنوان زیر شاخه ی کدام عنوانه ، از یک فیلد به نام parent_id استفاده کردم که در اون آی دی شاخه ی بالایی هر عنوان مشخص شده.
در صورتی که فیلد parent_id مقدار صفر داشته باشه ، یعنی اون عنوان ، عنوانی بدون شاخه ی بالاتر ه .

حالا من میخوام مشخص کنم که مثلا فلان عنوان ، چند مرحله زیر شاخه س.
یعنی اگه ما یک همچین وضعیتی داشته باشیم :

عنوان1 => عنوان5 => عنوان9
عنوان2 => عنوان3
عنوان4 => عنوان8 => عنوان6 =>عنوان7

در اینجا "عنوان9" در مرحله ی سوم ، و "عنوان7" در مرحله ی چهارم هستند.
امیدوارم تا اینجا منظور من رو فهمیده باشید.

حالا من برای این که مشخص کنم هر عنوان در مرحله ی چندم قرار داره از یک تابع خودفراخوان استفاده کردم :



function find_position_of_title($title_id,$rotbe){
$query=mysql_query("select * from `titles` where `id`='$title_id'");
$row=mysql_fetch_assoc($query);
if($row['parent_id']>0){
find_position_of_title($row['parent_id'],$rotbe+1);
}else{
return $rotbe;
}
}


من اینجا مشکلم اینه که ، این تابع برای همه ی گزینه ها ، مقدار 0 را برمیگردونه.
ایراد من کجاست؟
اگه راه بهتری برای رسیدن به این نتیجه دارید، ممنون میشم که کمکم کنید.
خیلی ممنون.

sokoot
سه شنبه 22 فروردین 1385, 20:06 عصر
حدس میزنم مشکل جایی بود که برات مشخص کردم


function find_position_of_title($title_id,$rotbe){
$query=mysql_query("select * from `titles` where `id`='$title_id'");
$row=mysql_fetch_assoc($query);
if($row['parent_id']>0){
return find_position_of_title($row['parent_id'],$rotbe+1);
}else{
return $rotbe;
}
}

tabib_m
سه شنبه 22 فروردین 1385, 22:37 عصر
فکر کنم درست گفته باشید، الان میرم تستش میکنم. :)

tabib_m
سه شنبه 22 فروردین 1385, 22:42 عصر
:)
تستش کردم.
کار کرد
خیلی ممنون.
:)