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

הוסטס - פורום אחסון האתרים הגדול בישראל (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=41746)

Eli-Hai 17-03-07 18:37

עזרה בייעול ושינוי קוד PHP הקשור בקטגוריות רקורסיביות
 
PHP קוד:

$query_one mysql_query("SELECT * FROM `categories` WHERE `category_id` ='0' ORDER BY `id` ASC") or die(mysql_error());
while( 
$result mysql_fetch_array($query_one) )
    
$root_categories[$result["id"]] = $result["name"];

foreach( 
$root_categories as $id => $name ) {
    
$query_two mysql_query("SELECT * FROM `categories` WHERE `category_id` ='{$id}' ORDER BY `id` DESC");
    echo 
"<u>" $root_categories[$id] . "</u><br />";
        while( 
$result mysql_fetch_array($query_two) )
            echo 
$result["name"] . "<br />";


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

TopSite 17-03-07 23:06

ציטוט:

נכתב במקור על ידי Eli-Hai (פרסם 440865)
PHP קוד:

$query_one mysql_query("SELECT * FROM `categories` WHERE `category_id` ='0' ORDER BY `id` ASC") or die(mysql_error());
while( 
$result mysql_fetch_array($query_one) )
    
$root_categories[$result["id"]] = $result["name"];

foreach( 
$root_categories as $id => $name ) {
    
$query_two mysql_query("SELECT * FROM `categories` WHERE `category_id` ='{$id}' ORDER BY `id` DESC");
    echo 
"<u>" $root_categories[$id] . "</u><br />";
        while( 
$result mysql_fetch_array($query_two) )
            echo 
$result["name"] . "<br />";


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

מה לעזזל הולך שם?

Interactive 18-03-07 00:00

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

sUP 18-03-07 00:41

ציטוט:

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

רקורסיה זה היררכיה מסויימת בין דברים

הקריאה לפונקציה מתוך הפונקציה בעצם יוצרת את האפקט של הרקורסיה
בכך שהיא בודקת כל פעם תתי קבוצות


לפי ויקיפדיה:
רקורסיה (Recursion) היא תופעה שכל מופע שלה מכיל מופע נוסף שלה,
כך שהיא מתרחשת ומשתקפת בשלמותה בתוך עצמה שוב ושוב.

4ior 18-03-07 14:23

אם אתה רוצה לעשות קטגוריות אין-סופיות זה לא עובד. נגיד יש לך את זה:
id category_id name

1 0 one
2 1 two
3 2 three

מה שזה יכתוב זה
one
two
במקום
one
two
three

אתה יכול גם במקום
PHP קוד:

echo "<u>" $root_categories[$id] . "</u><br />"

לשים
PHP קוד:

echo "<u>" $name "</u><br />"

וגם אתה לא צריך לעשות SELECT * תמיד זה טוב להגביל..


תיקון- לא ראיתי שכתבת שזה עושה סאב אחד..

Eli-Hai 18-03-07 16:09

ניסיתי לשנות, וניסיתי, וניסיתי, אבל אני צריך אינדקס של כל הקטגוריות הרקורסיביות ולא רק לפי ID1.

4ior 18-03-07 16:41

עשיתי לך משהו קצת שונה.
PHP קוד:

all_categories('0');
function 
all_categories($id){
    
$sql="SELECT * FROM `categories` WHERE `category_id` ='$id' ORDER BY `id` DESC";
    
$result mysql_query($sql) or die(mysql_error());    
    while( 
$row mysql_fetch_object($result) ){
        echo 
"<br>".get_name($row->id);
        if(
$row->top==1all_categories($row->id);    
    }    
}

function 
get_name($id){    
    
$row=mysql_fetch_array(mysql_query("SELECT `name` FROM `categories` WHERE `id`='$id'"));
    return 
$row['name'];


אתה צריך להוסיף בזה עוד שורה top או שתעשה פונקציה שתחזיר אמת או שקר אם יש מתחת לקטגוריה עוד קטגוריה

The Crow 18-03-07 16:56

http://www.hosts.co.il/forums/showpo...44&postcount=8

Eli-Hai 18-03-07 18:19

טנקס, אני אציץ בקוד בהמשך היום!

BlueNosE 18-03-07 21:29

ליעל, בני אדם, ליעל.
תחשבו על זה:
כל פעם לשלוף מחדש מהמסד?
צור מערך מראש ושלוף ממנו את המידע - אני אפילו הכנסתי מערך לסשן פעם ראשונה ואח"כ השתמשתי משם.


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

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