לתת ID לכל עץ (במקרה הזה יכול להיות הID של הודעת האב הראשונה).
ואז לעשות במספר לתת id במספר יורד לפי הסדר לכל הודעה , ולשלוף לפי הID הזה.
רקורסיה אתה לא יכול לעשות עם SQL כי היא לא שפת תכנות בסופו של דבר.
הפיתרון הוא במקום לשמור רק את ה-ParentID כמו שהצעת, לשמור את כל ה-ParentIDs (כלומר ברבים) ברשימה מופרדת בפסיקים. ואז ניתן בקלות לשלוף בעזרת פונקציית FIND_IN_SET, לדוגמא:
SELECT ... WHERE FIND_IN_SET('1', parent_ids)
זה יחזיר את כל הרשומות שהן צאצאים של אבא עם ID מספר 1.
שים לב שיתבצע full table scan, כלומר לא ניתן להשתמש באינדקסים לאופטימיזציה.
תקרא אולי על התיאוריה ותשמש בנוסחא שהבאתי לך במערך אחד. (או טור) כשהאינדסקים שלו ממוינים בסדר ( 0 1 2 3 n+1...) עולה.
גם אם זה סתם בשביל להשכיל כי זה מבנה נתונים די מוכר ופשוט.
הבעייה שלי היא שיש לי כמה מליוני רשומות בטבלא הזו עם כמה עשרות אלפי "שושלות". אני צריך שושלת רק של כמה מקרים בודדים. זה יהיה יקר מדי לעשות שאילתא שתתפוס את כל הטבלא ולהתחיל לסדר אותה במערכים (אני בספק אם הזיכרון יעמוד בכזה מערך)
או במקומות שאתה לא יכול לאבד זמן.מבחינת אלגוריתם אתה עלול למצוא את עצמך מריץ בלי יעילות פעמיים כל איבר במערך.
זאת אומרת - הרקורסיה עוברת על כל העץ מוצאת את הנקודה ואחר כך עוברת בחזרה.
אם אתה מחפש חוסר יעילות והעיקר שזה ימצא לך את האיבר עם הנוחות שלך ולא משנה לך מהזמן וניצול משאבים .. אז לך ע רקורסיה