לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

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



  #1  
ישן 28-09-2010, 01:54
  yuvalas yuvalas אינו מחובר  
 
חבר מתאריך: 12.04.07
הודעות: 189
שאלה על דרך לשליפת נתונים מMySQL והצגתם בשרשור באמצעות PHP

שלום,
יש לי טבלה (cat) הבנויה כך: id, name, rootid, img, description (מס' סידורי, שם, הID של הקט' אב, תמונה, תיאור).
זו טבלה שמכילה רשימה ונתונים של הקטגוריות.
מה שאני רוצה זה להציג את הנתונים בצורה משורשרת.
למשל אם זה התוכן של הטבלה:
קוד:
|--------------------------------------------------------------------------| |-- id --|--------- name ----------|--rootid---|--img--|----description----| |-- 1 ---|------ first cat --------|--(null) --|-q.jpg-|----my category----| |-- 2 ---|------ second cat -------|--(null) --|-w.jpg-|----my category----| |-- 3 ---|----- first sub cat -----|---- 1 ----|-e.jpg-|----my category----| |-- 4 ---|---- second sub cat -----|---- 1 ----|-r.jpg-|----my category----| |-- 5 ---|---- another sub cat ----|---- 3 ----|-t.jpg-|----my category----| |--------------------------------------------------------------------------|

שיראה את זה ככה:
  • first cat
    • first sub cat
      • another sub cat
    • second sub cat
  • second cat

אני שובר את הראש כבר כמה שעות טובות ולא מצליח!!
משהו יכול לעזור לי?
תודה מראש,
יובל.
_____________________________________
יובל
בעלים, מנהל, ומתכנת בפועל של חברה לבניית אתרים.

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #6  
ישן 28-09-2010, 19:11
צלמית המשתמש של Eran
  משתמש זכר Eran Eran אינו מחובר  
 
חבר מתאריך: 27.02.02
הודעות: 4,536
שלח הודעה דרך ICQ אל Eran
בתגובה להודעה מספר 5 שנכתבה על ידי yuvalas שמתחילה ב "וואלה זה בדיוק מה..."

קודם כל הסבירו לך מאוד יפה כאן
http://www.fresh.co.il/vBulletin/sh...542#post3838763


אבל בכל זאת
בדיוק כמו מבנה הטבלה שלך שמכיל ID ו rootid (הורה)

הכנסנו את המסד נתונים לתוך מערך כדי שיהיה נוח לעבוד עם הנתונים בצורה שאנחנו רוצים.
*לפי התכנית שלו כל רשומה מקבלת ID חדש - מ 0 עד סוף הרשומות.
משם יצרנו פונקציה רקורסיבית כדי שנוכל לעבוד עם אין-סוף מקרים-ותגובות.
הפונקציה רצה על כל הרשומות ופולטת ברקורסיה את הרשומה שההורה שלה הוא אותו ID.

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

כמו-כן אם מצא אז הדפס אם לא אז אל תעשה כלום.

כדי להציג גם את הרווחים העברנו בפונקציה גם PAD
כלומר דורות - איזה דור ההודעה ולפי זה יודעים מה הרווח הנכון לתצוגה.
____


אני לא הייתי עובד ככה.
הפונקציה שלו בעצם תרוץ 5*5 פעמים
על כל תגובה היא תחפש בכל המערך אם יש לו תגובות - אפילו את עצמו הוא בודק.

כשיש עבודה עם מערך אין-סופי יותר נוח לגשת לנתונים לפי אינדקס.
לדוגמא
קוד PHP:
 $query mysql_query('SELECT * FROM `posts`');

while ((
$post mysql_fetch_assoc($query)) !== false){
    
$posts[$post['refer_to']][$post['id']] = $post;


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

[התמונה הבאה מגיעה מקישור שלא מתחיל ב https ולכן לא הוטמעה בדף כדי לשמור על https תקין: http://fresh.clanteam.com/list.png]

[התמונה הבאה מגיעה מקישור שלא מתחיל ב https ולכן לא הוטמעה בדף כדי לשמור על https תקין: http://fresh.clanteam.com/?https://2010-uploaded.fresh.co.il/2010/09/21/52868411.gif,http://www.boredpanda.com/blog/wp-content/themes/mimbo2.2/images/subscribe-panda-605px.png]

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #15  
ישן 29-09-2010, 12:09
צלמית המשתמש של fap
  fap fap אינו מחובר  
 
חבר מתאריך: 30.08.09
הודעות: 2,880
בתגובה להודעה מספר 14 שנכתבה על ידי hellfrost שמתחילה ב "או קיי. אז מה שעשית מטומטם...."

אתה ממשיך לכתוב שטויות:

1. הייתה לי קצת בעיה לגשת לפני שנה להודעה שכתבת היום, בעיקר בגלל.. הממ. אולי העובדה שמסע בזמן
עדיין לא אפשרי. לכן אם הגולש החליט להתעלם מההודעה שלך, זו בעיה שלך, או שלו, לי לא באמת אכפת.
2. בוא ואקשר אותך שוב למה שכתבתי: http://www.fresh.co.il/vBulletin/showthread.php?t=22940
בשורה האחרונה:
ציטוט:
* כנראה ניתן לייעל את הפעולה הרקורסיבית בכמה דרכים, אך כמו שאמרתי אני מציג כאן את הרעיון המרכזי, אתם יכולים לבצע אופטימיזציה ולתמרן את הקוד בהתאם לצרכים שלכם.

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

3. לעיקרו של עניין, כתבת "רק אני רואה את הבעייתיות של להביא טבלה שלמה היישר לשרת?"

כן, אם יש לך טבלה שמכילה את כל מה שאתה רוצה להציג באתר שלך, גם אם זה רשימת כל החיילים, וגם אם זו השיטה שהבאת בלינק שלך,
בשלב כלשהו אתה צריך להעביר את כל מה שיש במסד דרך מנוע PHP, אחרת איפה ההגיון, הוא אמור לנחש את מה שיש במסד?
לא סתם רשמתי "כן".
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #19  
ישן 29-09-2010, 14:03
צלמית המשתמש של asx
  משתמש זכר asx asx אינו מחובר  
 
חבר מתאריך: 07.10.04
הודעות: 373
בתגובה להודעה מספר 18 שנכתבה על ידי Zed3 שמתחילה ב "איך אתה רוצה לשלוף תצוגת עץ..."

אני כרגע לומד את הנושא הזה, אבל hellfrost הביא רפרנס ל managing hierarchical data in mysql בתחילת האשכול. אם תגלול שם למטה, יש הסבר על שיטה שנקראת the nested set model.
החסרון המיידי שאני רואה מהשיטה הזאת שעידכון הנתונים קצת מסורבל (בכדי להוסיף נתונים, צריך כמעט בכל המקרים לעדכן את רוב הרשומות). אז כמובן שהיא לא יעילה כל כך במידה והנתונים שלנו מתעדכנים לעיטים תכופות.

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

בכל מקרה, אני כמו שאתה שם לב מודע לזה שהפיתרון לא מאה אחוז ועדיין יהיו מצבים שצריך את הרקורסיה הבסיסית, אבל בנתיים אני לומד לפחות ופותח לעצמי אופציות לעתיד
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #34  
ישן 29-09-2010, 16:34
צלמית המשתמש של fap
  fap fap אינו מחובר  
 
חבר מתאריך: 30.08.09
הודעות: 2,880
בתגובה להודעה מספר 33 שנכתבה על ידי hellfrost שמתחילה ב "1. אני מצטער שאתה לוקח דברים..."

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

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

3. מה גרם לך לחשוב שאני לא יודע מהי שפת לקוח/צד-שרת?
vBulletin מסדר את עץ התגובות בJavascript כדי לחסוך משאבים מהשרת ולהפיל את זה על הלקוח (בצדק).
אבל לפני כן הם צריכים לשלוף את הנתונים עם PHP ממסד הנתונים כמו שאני עשיתי.

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

נערך לאחרונה ע"י fap בתאריך 29-09-2010 בשעה 16:40.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #36  
ישן 29-09-2010, 17:22
צלמית המשתמש של fap
  fap fap אינו מחובר  
 
חבר מתאריך: 30.08.09
הודעות: 2,880
בתגובה להודעה מספר 35 שנכתבה על ידי hellfrost שמתחילה ב "1. אל תלמד אותי להתנסח, תודה...."

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

שום דבר ממה שהצגת פה לא קריטי, אפילו לא קצת, נוחות הרבה פעמים מעפילה על יעילות.
אם יש לך טענות לכל דבר אז אנא אל תגיב לי יותר, אני לא מעוניין בפטרולים שלך עם הנסיונות למצוא בכוח דברים שהם לא בסדר למרות שהם כן.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #46  
ישן 30-09-2010, 18:29
צלמית המשתמש של Eran
  משתמש זכר Eran Eran אינו מחובר  
 
חבר מתאריך: 27.02.02
הודעות: 4,536
שלח הודעה דרך ICQ אל Eran
בתגובה להודעה מספר 45 שנכתבה על ידי hellfrost שמתחילה ב "[QUOTE=Zed3]מפאת קוצר הזמן,..."

תוסיף שייכות להודעה הראשית בכל התגובות ככה תסנן. זה לא הגיוני לשלוף טבלה שלמה סתם ככה.
קוד PHP:
 $query mysql_query('SELECT * FROM `posts` where post_id=$whatever'); 

אני לא חושב שמישהו פה (כולל הכותב) בכל מהלך הדיון הזה התכוון לכתוב שאילתה שתשלוף נתונים לא קשורים לדף כגון תגובות להודעות אחרות שלא קשורות.


אתם סתם חופרים פה!
_____________________________________

[התמונה הבאה מגיעה מקישור שלא מתחיל ב https ולכן לא הוטמעה בדף כדי לשמור על https תקין: http://fresh.clanteam.com/list.png]

[התמונה הבאה מגיעה מקישור שלא מתחיל ב https ולכן לא הוטמעה בדף כדי לשמור על https תקין: http://fresh.clanteam.com/?https://2010-uploaded.fresh.co.il/2010/09/21/52868411.gif,http://www.boredpanda.com/blog/wp-content/themes/mimbo2.2/images/subscribe-panda-605px.png]

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
האשכול נעול

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

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

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 00:05

הדף נוצר ב 0.13 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר