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

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

4ior 04-06-07 08:01

תגידו זה יעיל?(קטגוריות)
 
היה לי משעמם, אז חשבתי על כל מיני דרכים למצוא סאב קטגוריות, אחת מהדרכים היא זאת:
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);
עשיתי אותה תוך דקה בערך, ואני יודע שיש כאן הרבה שאילתות.
אבל זה דיי יעיל לא?

O-B 04-06-07 09:07

למה ה-for?
תשתמש ב:
PHP קוד:

echo str_repeat("-"$i); 


HagaiA 04-06-07 09:30

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

4ior 04-06-07 09:37

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

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

HagaiA 04-06-07 09:48

אתה יכול לעשות שזה יופנה לכל השאילתות שתרצה ע"י זה שהשאילתה תהיה גם ערך בפונקציה וכך זה יפעיל את השאילתה שאתה רוצה בכל פעם ובקשר לתוכן של הWHILE,
תוכל לעשות שהוא יכתוב אותו רק אם $access == "1" למשל וכך תוכל לחסוך במשאבים.

BlueNosE 04-06-07 12:26

תשלוך הכל בשאילתא אחת, ותכניס לתוך מערך שבתוכו יהיה את המידע..

O-B 04-06-07 14:09

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 491973)
תשלוך הכל בשאילתא אחת, ותכניס לתוך מערך שבתוכו יהיה את המידע..

תוכל להסביר את עצמך יותר טוב?
היתי רוצה גם לדעת..

BlueNosE 04-06-07 14:31

PHP קוד:

$I = array();
$DB->Query("SELECT * FROM items_source");
    while (
$q $DB->Fetch())
    
$I[$q['id']] = $q

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

LosNir 04-06-07 14:38

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 492037)
PHP קוד:

$I = array();
$DB->Query("SELECT * FROM items_source");
    while (
$q $DB->Fetch())
    
$I[$q['id']] = $q

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

אהבתי :)

RS324 04-06-07 15:09

יעיל ? ממש לא. ואני אתן לך לך דוגמא פשוטה
יש לי קטגוריה ראשית ובתוכה 100 תתי קטגוריות.

עבור מקרה כזה אתה תבצע 101 שאילתות בדף אחד
שזה המון !!

מה יקרה אם יהיה לי 1000 קטגוריות ? אז יתבצע 1001 שאילתות
ככה שיעיל זה ממש לא.
תלמד להשתמש ב JOIN בשאילתות של MYSQL. אני בעזרת שאילתה אחת יכול לשלוף לך את כל הקטגוריות והתתי קטגוריות, לא משנה כמה יש.

http://www.google.co.il/search?q=mys...ient=firefox-a


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

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