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

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

Eran-s 04-06-07 17:00

ציטוט:

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

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

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

השורה ה-4 צריכה להיות אם הבנתי נכון מה אתה מנסה להציג.
PHP קוד:

$I[$q['id']][] = $q

כמו שרותם אמר, JOIN הוא הפתרון היעיל ביותר לבעיה זו.

BlueNosE 04-06-07 18:38

ציטוט:

נכתב במקור על ידי Eran-s (פרסם 492156)
השורה ה-4 צריכה להיות אם הבנתי נכון מה אתה מנסה להציג.
PHP קוד:

$I[$q['id']][] = $q

כמו שרותם אמר, JOIN הוא הפתרון היעיל ביותר לבעיה זו.

איך הבנת את זה?..
השורה הרביעית לוקחת את האיבר הנוכחי בלופ ($q) ומכניסה לתוך המערך I עם הID.. למה להכניס עוד מערך בתוך?

וחוץ מזה אפשר להשתמש באיחוד לטבלה אחת את הכל, בלי JOIN.. הכל באותה טבלה.

RS324 04-06-07 18:42

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 492251)
איך הבנת את זה?..
השורה הרביעית לוקחת את האיבר הנוכחי בלופ ($q) ומכניסה לתוך המערך I עם הID.. למה להכניס עוד מערך בתוך?

וחוץ מזה אפשר להשתמש באיחוד לטבלה אחת את הכל, בלי JOIN.. הכל באותה טבלה.

אוקי אז בשיטה שלך בוא תראה לי איך אתה לוקח את כל התתי קטגוריות ששייכים לקטגוריה ראשית מספר 5

יעני ה ID של הקטגוריה הראשית הוא 5
ואני רוצה את כל התתי קטגוריות שלו כולל השם של הראשית ושאר הפרטים של הראשית

בשאילתה אחת...

BlueNosE 04-06-07 18:44

אתה יודע שאפשר לשלוף פעמיים מאותה טבלה מידע, נכון? item_source t, item_source i

עריכה: הינה בשבילך אני אטרח
PHP קוד:

SELECT t.*, i.fld1 AS Mfld1i.fld2 AS Mfld2 FROM items_source t WHERE t.sid=5
LEFT JOIN items_source i ON 
(i.id=5


RS324 04-06-07 18:48

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 492260)
אתה יודע שאפשר לשלוף פעמיים מאותה טבלה מידע, נכון? item_source t, item_source i

כן אבל לא חשבתי על זה...חח..

Eran-s 04-06-07 20:54

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 492251)
איך הבנת את זה?..
השורה הרביעית לוקחת את האיבר הנוכחי בלופ ($q) ומכניסה לתוך המערך I עם הID.. למה להכניס עוד מערך בתוך?

וחוץ מזה אפשר להשתמש באיחוד לטבלה אחת את הכל, בלי JOIN.. הכל באותה טבלה.

אז מה מכיל כל תא במערך? (אמור להכיל את כל התתי קטגוריות לפי קטגוריה?)

BlueNosE 04-06-07 21:05

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

LosNir 04-06-07 21:46

הינה הפלט שיוצא: http://shellrock.info/category.php


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

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