הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   [PHP] רקורסיה (https://hosts.co.il/forums/showthread.php?t=51983)

-roee- 13-08-07 19:19

[PHP] רקורסיה
 
שלום,

אני בונה עכשיו מן מערכת קטגוריות שיהיה דרכה אפשרות ליצור תתי קטגוריות ללא הגבלה.
אז בניתי משהו כזה:
אם זו קטגוריה ראשית (כלומר מופיעה בדף הבית) אז אני מכניס למסד בעמודה is_first אפס. כלומר is_first=0
ואז בדף הבית אני שולף את הקטגוריות הראשיות על ידי where is_first='0'

עכשיו עשיתי תת קטגוריה שבעצם הID של קטגורית האב שלה הוא ה is_first של התת קטגוריה
לדוגמא יש לי קטגוריה ראשית שהID=1, is_first=0
אני יוצר תת קטגוריה שהis_first=1...
ואז פשוט אני שולף את התתי קטגוריות של הקטגוריה הראשית על ידי where is_first='$myID' כאשר ה myID הוא הID של הקטגוריה הנוכחית..

הבעיה היא שאני נתקעתי בקטגוריה שאחרי התת קטגוריה.. כלומר אני יוצר קטגוריה שלישית, שזה יראה נגיד משו כזה:
קטגוריה ראשית -> תת-קטגוריה --> תת-תת קטגוריה
ואז ה is_first שלה יהיה שווה ל2 (ה ID של התת קטגוריה)..

אז אני רוצה לדעת איך אני מוציא את הקטגוריה הראשית ובכלל את כל הרצף של הקטגוריות שהיו עד עכשיו מה תת-תת קטגוריה..

מקווה שהבנתם..

תודה

4ior 13-08-07 19:37

אם היית נותן את הפונקציה, הייתי מתקן לך את הבעיה הספציפית...
אבל בעקרון קח את הפונקציה של הרקורסיה:
PHP קוד:

function print_subs($id,$i){
    
$sql="SELECT * FROM `category` WHERE `pid`='".$id."'";
    
$result=mysql_query($sql) or die(mysql_error());
    if(
mysql_num_rows($result)>0){
        while(
$row=mysql_fetch_array($result)){
            for (
$x=0;$x<$i;$x++) echo "-";
            echo 
$row['title']."<br />";
            
print_subs($row['id'],$i+1);                    
        }
    }


ואתה קורא לה ככה: print_subs(0,0);

-roee- 13-08-07 19:46

ציטוט:

נכתב במקור על ידי 4ior (פרסם 541066)
אם היית נותן את הפונקציה, הייתי מתקן לך את הבעיה הספציפית...
אבל בעקרון קח את הפונקציה של הרקורסיה:
PHP קוד:

function print_subs($id,$i){
    
$sql="SELECT * FROM `category` WHERE `pid`='".$id."'";
    
$result=mysql_query($sql) or die(mysql_error());
    if(
mysql_num_rows($result)>0){
        while(
$row=mysql_fetch_array($result)){
            for (
$x=0;$x<$i;$x++) echo "-";
            echo 
$row['title']."<br />";
            
print_subs($row['id'],$i+1);                    
        }
    }


ואתה קורא לה ככה: print_subs(0,0);


מה בעצם הפונקציה הזאת עושה?

מדפיסה את ה ID של כל התתי קטגוריות בקטגוריה מסויימת?

4ior 13-08-07 20:02

לא, היא מדפיסה את הכותרת של הקטגוריה..

-roee- 13-08-07 20:25

ELAD-A עזר לי..
תודה אחי

O-B 14-08-07 01:12

ממש אבל ממש לא יעיל..
אם יש לך 100 קטגוריות?..
אתה תבצע select 100 פעמים?..

לא נראה לי פתרון טוב..
הפתרון שאני מציע זה לשלוף את כל הקטגוריות למערך דו-מימדי
ואז לעבוד איתו...

Daniel 14-08-07 09:04

תקרא על JOIN, כי כמו ש-O-B אמר, ברגע שיהיה קצת יותר קטגוריות, או שהרבה יכנסו לאתר,....


כל הזמנים הם GMT +2. הזמן כעת הוא 23:50.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ