שאלה של היגיון

koler

New member
שאלה של היגיון

שלום לכולם יש לי טבלה במסד הנתונים עם קטגוריות , שמסודרת בצורת היררכיה , כלומר יש קטגוריות אלפא "ללא אבא" ויש קטגוריות משניות עם אבא:

|c_id| |c_name| |c_father|
1 cat_1 0
2 cat_2 1
3 cat_3 3



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

cat_1 > cat_2 > cat_3


איך אני שולף את שתי הקטגוריות הקודמות לפי הid של הקטגוריה השלישית (איך אני חוזר אחורה ומגלה מה הן הקטגוריות אב)

תודה
 

NetCriminal

New member
פתרון היוריסטי ביותר

אני חושב שאפשר להגיע לפתרון יעיל יותר, אבל בחשיבה מהירה הייתי
1) מגדיר משתנה FLAG=1 ועושה לולאת WHILE
2) בכל אטרציה של הלולאה מבצע שאילתת SELECT על הקטגוריה הנוכחית, שולף את ה-ID של האב. אם ה-ID של האב הוא 0 (כלומר הגענו לסוף הררכיה) אז FLAG=0, אחרת ממשיכים להריץ את הלולאה.
 

intval

New member
אולי זה השלב שבו אתה עובד למסד נתונים אחר

mysql זה בערך המסד היחידי בלי שליפות הירארכיות.
postgre נשמע כמו אופציה בשבילך. או אפילו redis עם מיפוי של בן לאב.

אם אתה בכל זאת נשאר עם mysql יש לך שני אופציות:
או לעשות לולאה של שאילתות (שאם העומק של העץ שלך הוא בסה"כ 3 אלמנטים - זה בסדר גמור)
או לממש nested set
 

shayfalador

New member
יש שיטה מאוד מעניינת לפתרון של בעיות כאלו

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

shayfalador

New member
אני חושב שיש שם דרך יעילה לעשות את זה

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

gilmad

New member
זה לא הפוך?

יכול להיות שלא הבנתי...
נניח שאני נמצא בSun Dresses
איך בשיטה הזאת אני מגלה את ההורים?

הפוך אני מבין - כל הורה מכיל את התחום של הילדים שלו...

ולבעיה המקורית - אפשר בשליפה אחת אם מוסיפים עמודה נוספת של קבוצה - ואז שולפים לפי קבוצה ובמקום רקורסיה של שאילתות (איטי מאוד) תהיה רקורסיה של PHP
 

gilmad

New member
לא חשוב... הבנתי...

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