הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

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

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 23-10-10, 02:44   # 1
exciter
משתמש - היכל התהילה
 
exciter's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: סוף העולם, שמאלה
הודעות: 672

exciter לא מחובר  

שליפת SQL מתקדמת (קטגוריות ותתי קטגוריות)

אהלן חברה,

אני מנסה למצוא דרך יעילה לבצע שליפת SQL מסוימת...
אני אסביר את המצב ע"מ לפשט את העניין.

יש לי טבלה אחת, אשר מכילה קטגוריות ותתי קטגוריות.
לדוגמא:
ID NAME FID
1 CAT1 0
2 CAT2 0
3 SUBCAT1 1
4 SUBCAT2 1
5 SUBCAT3 2
6 SUBCAT4 2

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

ID NAME FID
1 CAT1 0
3 SUBCAT1 1
4 SUBCAT2 1
2 CAT2 0
5 SUBCAT3 2
6 SUBCAT4 2

יש למישהו מושג? חיפשתי לזה תשובה, ולא מצאתי משהו ריאלי... אני שוקל לחזור ללולאה בתוך לולאה, אבל ממש מרגיז אותי להשתמש בזה.

תודה מראש.
__________________
  Reply With Quote
ישן 23-10-10, 02:53   # 2
BlueNosE
אין כמו ב127.0.0.1
 
BlueNosE's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: כפ"ס
גיל: 31
הודעות: 4,086

BlueNosE לא מחובר  

אם במילא אתה שולף כמות ידועה של נתונים, למה שלא תשלוף את הכל ותסדר בתוך מערך דו-מימדי?
__________________
עומר,
admin [@] rely.co.il

בניית אתרים Rely

סלנג מילון סלנג utter
  Reply With Quote
ישן 23-10-10, 02:57   # 3
exciter
משתמש - היכל התהילה
 
exciter's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: סוף העולם, שמאלה
הודעות: 672

exciter לא מחובר  

אני לא יודע מה הכמות נתונים שיש... זה משהו דינמי... אם זה היה ידוע, איזו סיבה יש לי להחזיק את זה במסד נתונים? :\
__________________
  Reply With Quote
ישן 23-10-10, 08:53   # 4
AlonMi
חבר על
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
הודעות: 987

AlonMi לא מחובר  

שיטה זו של שליפת נתונים נקראת Recursive
בהצלחה - http://www.google.co.il/#hl=iw&sourc...1ad82c9add7e94
__________________
בברכה,
אלון מיכאלי
נקסטפ Next-Step בניית אתרים
  Reply With Quote
ישן 23-10-10, 11:36   # 5
IgalSt
מנהל פורום, עסק רשום
 
IgalSt's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: המרכז
גיל: 37
הודעות: 1,432
Send a message via Skype™ to IgalSt

IgalSt לא מחובר  

ציטוט:
נכתב במקור על ידי AlonMi צפה בהודעה
שיטה זו של שליפת נתונים נקראת Recursive
בהצלחה - http://www.google.co.il/#hl=iw&sourc...1ad82c9add7e94
יעיל זה לא, אבל אכן זו הדרך היחידה לבצע את השליפות הללו.

אפשר לשלוח באמצעות פרוצדורת DB שתבצע את הרקורסיה או באמצעות PHP שישלוף.
עדיף פרוצדורה כי ככה חוסכים קצת "תקשורת" בין PHP ל-DB.

כמו כן, לדעתי אפיון הטבלאות לא נכון.
האפיון אמור להיות בערך ככה:
tblCategories:
- CatId
- ParentCatId
- Name

כאשר קטגוריות ראשיות מקבלות ערך ParentCatId=0 והילדים שלהם יקבלו את ה-CatId שלהם. בצורה כזאת תקבל אפשרות להוסיף כמויות בלתי מוגבלות של קשרי אבא-ילד וזה יתאים לך טוב לרקורסיה של השליפה.

בצורה דומה בונים "פורום רקורסיבי" פשוט (פורום עם מבנה עץ - כמו תפוז לדוגמא)
  Reply With Quote
ישן 23-10-10, 12:02   # 6
BlueNosE
אין כמו ב127.0.0.1
 
BlueNosE's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: כפ"ס
גיל: 31
הודעות: 4,086

BlueNosE לא מחובר  

ציטוט:
נכתב במקור על ידי exciter צפה בהודעה
אני לא יודע מה הכמות נתונים שיש... זה משהו דינמי... אם זה היה ידוע, איזו סיבה יש לי להחזיק את זה במסד נתונים? :\
"כל הנתונים" או "כל הנתונים שיש להם visible=1" זה כמות ידועה של נתונים. אפשר אפילו להיות יותר ספציפיים, וזו עדיין כמות ידועה.

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



ציטוט:
נכתב במקור על ידי Exa.co.il צפה בהודעה
יעיל זה לא, אבל אכן זו הדרך היחידה לבצע את השליפות הללו.

אפשר לשלוח באמצעות פרוצדורת DB שתבצע את הרקורסיה או באמצעות PHP שישלוף.
עדיף פרוצדורה כי ככה חוסכים קצת "תקשורת" בין PHP ל-DB.

כמו כן, לדעתי אפיון הטבלאות לא נכון.
האפיון אמור להיות בערך ככה:
tblCategories:
- CatId
- ParentCatId
- Name

כאשר קטגוריות ראשיות מקבלות ערך ParentCatId=0 והילדים שלהם יקבלו את ה-CatId שלהם. בצורה כזאת תקבל אפשרות להוסיף כמויות בלתי מוגבלות של קשרי אבא-ילד וזה יתאים לך טוב לרקורסיה של השליפה.

בצורה דומה בונים "פורום רקורסיבי" פשוט (פורום עם מבנה עץ - כמו תפוז לדוגמא)
לא מדויק שזו השיטה היחידה, בכלל לא. במערכות עם מודול קטלוג המוצרים שלי, אני משתמש בשאילתא אחת בשביל לשלוף תפריט שלם ופשוט מסדר, כמו שהסברתי למעלה, וראיתי כבר עוד שיטה פעם שחוסכת גם היא בשאילתות.
__________________
עומר,
admin [@] rely.co.il

בניית אתרים Rely

סלנג מילון סלנג utter
  Reply With Quote
ישן 23-10-10, 14:56   # 7
exciter
משתמש - היכל התהילה
 
exciter's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: סוף העולם, שמאלה
הודעות: 672

exciter לא מחובר  

טוב אחרי לילה ארוך.. הבנתי שאין ממש שיטה יעילה ע"י שליפה לבצע דבר כזה.
Exa.co.il, ככה הטבלה שלי נראית, אני נתתי דוגמא...
BlueNosE, כנראה שלא הבנתי את הכוונה שלך בהתחלה... ועברתי בסופו של דבר למערך דו-מימדי כמו שהצעת, לא מצאתי משהו יותר נוח/יעיל מזה...

תודה חברה.
__________________
  Reply With Quote
ישן 23-10-10, 15:41   # 8
OrPol
א.פורום תוכנה
עסק רשום
 
OrPol's Avatar
 
מיני פרופיל
תאריך הצטרפות: Aug 2006
הודעות: 1,979

OrPol לא מחובר  

ציטוט:
נכתב במקור על ידי Exa.co.il צפה בהודעה
יעיל זה לא, אבל אכן זו הדרך היחידה לבצע את השליפות הללו.

אפשר לשלוח באמצעות פרוצדורת DB שתבצע את הרקורסיה או באמצעות PHP שישלוף.
עדיף פרוצדורה כי ככה חוסכים קצת "תקשורת" בין PHP ל-DB.

כמו כן, לדעתי אפיון הטבלאות לא נכון.
האפיון אמור להיות בערך ככה:
tblCategories:
- CatId
- ParentCatId
- Name

כאשר קטגוריות ראשיות מקבלות ערך ParentCatId=0 והילדים שלהם יקבלו את ה-CatId שלהם. בצורה כזאת תקבל אפשרות להוסיף כמויות בלתי מוגבלות של קשרי אבא-ילד וזה יתאים לך טוב לרקורסיה של השליפה.

בצורה דומה בונים "פורום רקורסיבי" פשוט (פורום עם מבנה עץ - כמו תפוז לדוגמא)
זה בדיוק, אבל בדיוק מה שעשיתי כאן: www.e-roim.co.il
כאשר אפשר גם לשייך לאחר מכן פריטים למספר קטגוריות (ע"י IMPLODE) וכו'..

לדעתי זו השיטה הכי יעילה.
  Reply With Quote
ישן 23-10-10, 18:33   # 9
Shay Ben Moshe
משתמש - היכל התהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2007
הודעות: 1,397

Shay Ben Moshe לא מחובר  

אני לא חושב שתוכל לעשות את זה בשאילתה אחת ללא SUB QUERIES,
אם הייתי רוצה להתייעל כמה שיותר הייתי שולף את כל הדברים שהם תתי קטגוריות ואת כל הקטגוריות בנפרד בשתי שאילתות. אז הייתי רץ על השאילתה תתי הקט' וכל פעם שמתחילה קט' חדשה הייתי מציג את הפרטים של ה'ט הראשית הרלוונטית.
__________________
שי בן משה - בונה אתרים
חותך אתרים, ומתכנת צד לקוח וצד שרת.
  Reply With Quote
ישן 23-10-10, 19:39   # 10
IgalSt
מנהל פורום, עסק רשום
 
IgalSt's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: המרכז
גיל: 37
הודעות: 1,432
Send a message via Skype™ to IgalSt

IgalSt לא מחובר  

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

בכללי, השאלה היא את מי רוצים להעביד קשה ומה הוא צוואר הבקבוק: שרת ה-WEB שלך או ה-DB שלך. אפשר אכן לטעון את כל הקטגוריות לתוך מערך ולעשות את הרקורסיה בצד שרת או לקבל את זה מוכן מה-DB.

נ.ב:
אפשרות נוספת (בתנאי שזה מתאים מבחינת קידום ושיקולים נוספים) היא לבנות את התפריט הזה בקליינט. למה שהשרתים שלך יעבדו קשה אם אתה יכול לתת למחשב של המשתמש שלך להתאמץ קצת? להכניס את הכל למערך ב-JS ולבנות את התפריט לאחר העליה.

נ.ב 2:
גם אם עושים את זה, וישנו צפי גבוהה של גולשים לאתר (ו/או התפריט הזה חוזר על עצמו בכל העמודים) נכון יהיה לעשות קאשינג שלו. לבנות עמוד HTML שמכיל את התפריט ואתה טוען אותו פשוט או להכניס את המידע לסשין או אפליקיישן
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


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

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