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

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

DorWD 08-03-07 21:15

רקורסיה
 
שלום.
ביום-יומיים האחרונים למדתי קצת על רקורסיה, מה זה, ואיך זה עובד.
אני אשמח לקבל הכוונה, מאמר, דוגמא כיצד פונקצייה רקורסיבית עובדת עם SQL

תודה

Level-Serv 08-03-07 22:39

אני בעיקר משתמש בפונקציות רקורסיביות עם בניית תפריט נפתח עם קטגוריות ותתי קטגוריות כאשר לכל תת קטגוריה יכולים להיות עוד תתי קטגוריות וככה ללא הגבלה, כמובן שזה הכל כולל שליפה מהמסד נתונים.

לזה אתה מתכוון שאתה אומר "פונקצייה רקורסיבית עובדת עם SQL"?

DorWD 08-03-07 22:51

ציטוט:

נכתב במקור על ידי Level-Serv (פרסם 435524)
אני בעיקר משתמש בפונקציות רקורסיביות עם בניית תפריט נפתח עם קטגוריות ותתי קטגוריות כאשר לכל תת קטגוריה יכולים להיות עוד תתי קטגוריות וככה ללא הגבלה, כמובן שזה הכל כולל שליפה מהמסד נתונים.

לזה אתה מתכוון שאתה אומר "פונקצייה רקורסיבית עובדת עם SQL"?

בידיוק
אני רוצה לדעת את התכנון הן מהSQL והן מהחלק התכנותי

BlueNosE 08-03-07 22:55

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

אל תשכח גם לשים לב שלרקורסיה צריך להיות סיום.

DorWD 08-03-07 22:57

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 435546)
עדיף לשלוף את כל הנתונים מראש ואז לעבוד עם מערך, אין טעם לשלוף כל פעם מחדש בקריאה לפונקצייה.

אל תשכח גם לשים לב שלרקורסיה צריך להיות סיום.

אחרת זה אינסופי.. כן אני קראתי על זה
אבל אני מעדיף יותר לקבל כיוון, מאמר גם יעזור

x-ray 08-03-07 23:05

תקרא את זה: http://he.wikipedia.org/wiki/%D7%A8%...A1%D7%99%D7%94
יעזור לך להבנה אם זאת פעם ראשונה שאתה עובד עם רקורסיה.

DorWD 08-03-07 23:06

ציטוט:

נכתב במקור על ידי x-ray (פרסם 435561)
תקרא את זה: http://he.wikipedia.org/wiki/%D7%A8%...A1%D7%99%D7%94
יעזור לך להבנה אם זאת פעם ראשונה שאתה עובד עם רקורסיה.

קראתי את זה כבר לא פעם :)
את החלק המעשי קשה לי לעשות

x-ray 08-03-07 23:26

אם אתה יודע C תקרא את זה.
http://clang.eitan.ac.il/index.php?doc=chp&id=10

בניה 08-03-07 23:34

אין קשר ישיר בין SQL לבין רקורסיה.
רקורסיה זה פשוט שיטת תיכנות שעושה שימוש בכלים קיימים כמו AJAX שזה בעצם שימוש בXMLHTTP והביאו לזה שם כי זה פותח הרבה דלתות חדשות.

יש מאמר על פורום רקורסיבי בWEBMASTER ששמה עושים שימוש ברקורסיה ליצור פורום עץ ויש שמה שילוב של רקורסיה ו.SQL
http://www.webmaster.org.il/article.asp?id=140

Level-Serv 09-03-07 12:33

אני ממליץ לך להתחיל מרקורסיה יחסית פשוטה לפני שאתה מגיע לרקורסיה מסובכת הכוללת שליפה מהמסד נתונים.
תנסה קודם כל לשחק אם זה, תנסה לעשות לדוגמא רקורסיות שסתם ידפיסו מספרים לדוגמא מ1-100. תיראה שאתה מצליח לעשות דברים קצת יותר מורכבים..
ואז תעבור לשלב של שליפה מהמסד נתונים.

TopSite.co.il 09-03-07 13:49

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

בהצלחה.

DorWD 09-03-07 22:44

ציטוט:

נכתב במקור על ידי TopSite.co.il (פרסם 435783)
תראה, שימוש בריקורסיה המצריך שליפת מידע מDB רצוי תמיד לתכנן את הפונקציה שהיא תשלוף את כ-ל המידע הדרוש מהמסד ותעשה על המידע הזה מניפולציה בריקוריסה בלבד.
הדוגמא הקלאסית זה ממשק קטגוריות, שיש צורך בקטגוריות ראשיות, תת-קטגוריות, תת-תתי-קטגוריות וכו'.
במקום לשלוף את כל הקטגוריות הראשיות, ועבור כל קטגוריה את הבנים שלה ועבור כל בן את הבנים שלו עדיף לשלוף נניח את כל הקטגוריות ולבנות מהן מערך כלשהו ובאמצעות ריקורסיה לעבור ולעבד את המידע.

בהצלחה.

אני לא חושב שצריך לפתוח אשכול חדש בשביל זה

אז ככה עשיתי רקורסיה, שיחקתי ועבדתי עם זה קצת, זה מה שיצא:
http://www.dorwd.com/recursion.php

עכשיו השאלה שלי היא:
אני רוצה להוציא למשל את הbasketball ואת ה"ילדים" שלו לפי id
הid של הbasketball הוא 2.
אז אני רוצה להוציא אותו ואת ה"ילדים" שלו כrecursion.php?id=2
איך עושים את זה?
הנה הקוד הנוכחי:
PHP קוד:

<?
function  display($item=0$level=0)  { 
        
$query  =  "SELECT  id,  parent,  title  FROM  tree  WHERE  parent  =  '$item'"
        
$result  =  mysql_query($query)  or  die  (mysql_error()); 
       
$level++; 
        while  (
$row  =  mysql_fetch_assoc($result))  { 
        echo 
"<ul>";
        if (
$level == 1){
                echo  
"<li><b><p  style=\"text-indent:".($level  0)."\">".$row['title']."</p></b></li>\n"
            }
                else{
                echo  
"<li><p  style=\"text-indent:".($level  *  15)."\">".$row['title']."</p></li>\n";
            }
                
        echo 
"</ul>";
                
display($row['id'],$level); 
        } 
}
display(0);
?>


Level-Serv 10-03-07 01:08

ציטוט:

נכתב במקור על ידי DorWD (פרסם 436216)
אני לא חושב שצריך לפתוח אשכול חדש בשביל זה

אז ככה עשיתי רקורסיה, שיחקתי ועבדתי עם זה קצת, זה מה שיצא:
http://www.dorwd.com/recursion.php

עכשיו השאלה שלי היא:
אני רוצה להוציא למשל את הbasketball ואת ה"ילדים" שלו לפי id
הid של הbasketball הוא 2.
אז אני רוצה להוציא אותו ואת ה"ילדים" שלו כrecursion.php?id=2
איך עושים את זה?
הנה הקוד הנוכחי:
PHP קוד:

<?
function  display($item=0$level=0)  { 
        
$query  =  "SELECT  id,  parent,  title  FROM  tree  WHERE  parent  =  '$item'"
        
$result  =  mysql_query($query)  or  die  (mysql_error()); 
       
$level++; 
        while  (
$row  =  mysql_fetch_assoc($result))  { 
        echo 
"<ul>";
        if (
$level == 1){
                echo  
"<li><b><p  style=\"text-indent:".($level  0)."\">".$row['title']."</p></b></li>\n"
            }
                else{
                echo  
"<li><p  style=\"text-indent:".($level  *  15)."\">".$row['title']."</p></li>\n";
            }
 
        echo 
"</ul>";
                
display($row['id'],$level); 
        } 
}
display(0);
?>


לא קצת מיותר לעשות ($level * 0)? אפשר פשוט לרשום 0.

DorWD 10-03-07 01:10

ציטוט:

נכתב במקור על ידי Level-Serv (פרסם 436283)
לא קצת מיותר לעשות ($level * 0)? אפשר פשוט לרשום 0.

חפיף, אני רק חייב לדעת את השאלה ששאלתי


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

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