צפיות
תשובות
שליפת רשומות והצגתן באופן רקורסיבי
הקדמה:
בניתי מערכת שמנהלת קטגוריות. יש קטגוריה ראשית, ולכל קטגוריה ראשית יכולות להיות תת-קטגוריות, ולכל תת-קטגוריות יכולים להיות עוד תתי-קטגוריות וכו'…
מבנה הטבלה:
קטגוריות(מס' קטגוריה, שם הקטגוריה, מס' קטגוריית אב)
(קו תחתון=מפתח ראשי, מי שלמד ארגון קבצים מכיר את זה )
אני מחפש את השיטה הכי יעילה לשליפת רשומות והצגתן באופן רקורסיבי.
אני אציג כאן 2 דרכים שחשבתי עליהן. תוכלו לבחור אחת מהן או להציע דרך משלכם שנראית יותר יעילה.
דרך ראשונה
נכתוב שגרה שתקבל את הפרמטר מס' קטגוריית אב. השגרה תשלוף באמצעות שאילתה את כל הרשומות שמס' קטגוריית האב שלהן שווה לפרמטר. לכל קטגוריה שהשגרה תציג, היא תקרא לעצמה באופן רקורסיבי כדי להציג את כל תתי-הקטגוריות ששייכים לאותה קטגוריה.
כדי לקרוא לשגרה בדרך כלל נשתמש במס' קטגוריית אב 0 כדי להציג את כל ההודעות.
בשיטה זו השגרה מפעילה שאילתה בכל קריאה כדי לשלוף את הרשומות המתאימות.
דרך שניה
נכתוב שגרה שתקבל את הפרמטרים מס' קטגוריית אב ואת האוסף של כל הרשומות מטבלת הקטגוריות. השגרה תריץ לולאה שתאתר את כל הרשומות שמס' קטגוריית האב שלהן שווה לפרמטר. לכל קטגוריה שהשגרה תציג, היא תקרא לעצמה באופן רקורסיבי כדי להציג את כל תתי-הקטגוריות ששייכים לאותה קטגוריה.
כדי לקרוא לשגרה בדרך כלל נשתמש במס' קטגוריית אב 0 ונשלוף את כל הרשומות מטבלת הקטגוריות כמובן.
בשיטה זו השגרה מפעילה שאילתה רק פעם אחת אך ישנן לולאות שמחפשות את הרשומות המתאימות במקום זאת.
תודה שקראתם את המגילה שלי ממתין לתשובות.
5 תשובות
הכי יעיל זה לשלוף את הכל,
להעביר ללקוח,
ושם לבצע את הרקורסיה.
באותה מידה אפשר גם לבצע
סידור יותר נורמלי של הרשומות מלכת תחילה ואז את הסידור של העץ נעשה בצורה ליניארית – שימוש ב-DOM במקום ברקורסיה.
1. יצירת עמודה חדשה שמורה על האב הראשי (נגיד FirstCategoryId)
2. סידור: (משהו כמו זה)
ORDER BY FirstCategoryId, parentId
באופן הזה הרשומות קודם יסתדרו לפי האב הראשי ואז בתוך כל "קבוצה" של רשומות הם יסתדרו לפי ה-parentCategory
3. העברת הנתונים לצד לקוח. (ע"י getString או המחלקה של אוריקס)
4. יצירת Container כללי לכל הקטגוריות
4. מעבר ליניארי על כל הרשומות, עם ה-parentId=0 (נגיד) אז :
4.1 יוצרים אלמנט חדש ומכלילים אותו בתוך ה-container הראשי ע"י appendChild ה-ID שלו יהיה אות מסוימת + ה-ID של הקטגוריה
4.2 אם ה-parentId שונה מ-0 אז יוצרים אלמנט ומכלילים אותו בתוך אלמנט בעל ID המורכב מאות מסוימת + parentId של אותה קטגוריה.
וכמובן שניתן margin מתאים
לאלמנטים שיוצרים משלב 4.
יפה, אני רואה שעלית על השיטה
זה מקרה פשוט ביותר
אם בפורום עץ נגיד אני מבטל את הנושא של הקפצת השרשורים (כלומר אין לי עמודת תאריך שצריך לסדר בעזרתה את השרשורים) אז אני יכול לעבוד כך
אבל אם יש לי את הנושא של ההקפצה (כלומר יש את העמודה הנ"ל) אז זה
או שאני מכניס את התאריך לרשומות שהם גם לא מהווים נושאים ראשיים ואז מסדר לפי הדרך שכתבתי (רק מחליף את ה-FirstId ב-lastMessageDate) אבל אז אני עושה מניפולציות בהכנסה
או שאני עובד בצורה הרקורסיבית
או שאני עושה בדיוק כמו שאני תיארתי (רק להוסיף לפני ה-FirstId את תאריך ההקפצה) אבל אז כל הנושאים הראשיים יהיו בהתחלה ורק אחרכך התגובות מסודרות לפי שרשורים. נראה לי שזה בדיוק כמו השיטה שלי רק שהסידור קצת שונה, אבל לא ניסיתי את זה עדיין