הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   [PHP] הצגת המאמרים של הקטגוריה הראשית... (https://hosts.co.il/forums/showthread.php?t=51712)

O-B 09-08-07 21:14

[PHP] הצגת המאמרים של הקטגוריה הראשית...
 
יש לי שאלה שאני לא מצליח לפתור והיא..
יש לי מערכת קטגוריות רקרוסיבית.. כלומר קטגוריה רשאית ותחתיה עוד חחת ותחתיה עוד ועוד ועוד..

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

אשמח אם מישהו יעזור לי אם זה..

בניה 09-08-07 21:28

תעשה לכל קטגוריה קוד שבנוי מהעומק שלה והמספר שלה.
הכוונה קטגוריה ראשונה הקוד שלה יהיה ריק.
מתחתיה יש a1 וa2 וכן הלאה.
לבנות של a1 יקראו a1b1 a1b2 וכו'.
ואז בפריט שמשוייך לקטגוריה תכניס את הקוד של הקטגוריה.
ובשליפה אם אתה רוצה את כל התוכן שב ROOT אתה לא צריך שום התניה, אתה שולף את כל מה שבטבלה.
כדי לקבל את כל התוכן של a1 אתה עושה משהו כזה:
קוד:

WHERE 'code' LIKE 'a1%'
(וכן הלאה אני לא בטוח בדיוק כמה יעיל יהיה הLIKE, אבל אולי יש תנאים שיעבדו פה יותר טוב)

O-B 09-08-07 22:37

אולי למישהו יש שיטה טובה יותר?
כי כבר בניתי את הטבלאות.. עם מבנה של id,m_id,name

בניה 09-08-07 22:42

אתה יכול לשלוף את כל הקטגוריות הבנות של הקטגוריה שאתה רוצה לשלוף את התוכן שלה ואת כל הID שלהן להכניס ל
קוד:

WHERE cat IN(1,2,3)

DCB 10-08-07 05:43

תשתמש ברקורסיה שכבר בנית...

4ior 10-08-07 08:49

תבדוק אם זה עובד, חשבתי על זה כרגע. במקום להדפיס את הפלט, תחזיר אותו אחורה, עד שזה מגיע לקטגוריה הראשית, ושם תדפיס את כל מה שאתה מקבל, זאת אומרת:
  • קטגוריה 1
    • סאב קטגוריה 2
    • סאב קטגוריה 3
      • מאמר 1
      • מאמר 2
    • סאב קטגוריה 4
הרי איך זה הולך, זה ילך ככה:
1->2
1->3 ->מאמר 1 -> מאמר 2 ->3 -> 1
1->4

אז אתה מחזיר כי הרי זה תמיד יחזור לראשון.

O-B 10-08-07 12:40

ציטוט:

נכתב במקור על ידי בניה (פרסם 538998)
אתה יכול לשלוף את כל הקטגוריות הבנות של הקטגוריה שאתה רוצה לשלוף את התוכן שלה ואת כל הID שלהן להכניס ל
קוד:

WHERE cat IN(1,2,3)

מה ה IN עושה יש לך קישור להסבר כי לא מצאתי...

ציטוט:

נכתב במקור על ידי DCB (פרסם 539099)
תשתמש ברקורסיה שכבר בנית...

זה משהו שיעזור לי מאודד.. תודה ממש..

ציטוט:

נכתב במקור על ידי 4ior (פרסם 539105)
תבדוק אם זה עובד, חשבתי על זה כרגע. במקום להדפיס את הפלט, תחזיר אותו אחורה, עד שזה מגיע לקטגוריה הראשית, ושם תדפיס את כל מה שאתה מקבל, זאת אומרת:
  • קטגוריה 1
    • סאב קטגוריה 2
    • סאב קטגוריה 3
      • מאמר 1
      • מאמר 2
    • סאב קטגוריה 4
הרי איך זה הולך, זה ילך ככה:
1->2
1->3 ->מאמר 1 -> מאמר 2 ->3 -> 1
1->4

אז אתה מחזיר כי הרי זה תמיד יחזור לראשון.

לא הבנתי למה אתה מתכוון פה..

בניה 10-08-07 12:48

IN זה משווה את כל הערכים שבתוכו שמופרדים בפסיקים למה שאתה נותן לו.
למשל:
קוד:

SELECT * FROM tbl WHERE id IN(445,345,700)
ישלוף לך את השורות עם הID 445 345 700

4ior 10-08-07 13:56

ציטוט:

נכתב במקור על ידי O-B (פרסם 539186)
לא הבנתי למה אתה מתכוון פה..

...אתה יודע איך רקורסיה עובדת..או שסתם לקחת קוד?

תשים פה את הקוד של הרקורסיה שלך ואני יסביר לך..

O-B 10-08-07 20:17

ציטוט:

נכתב במקור על ידי 4ior (פרסם 539241)
...אתה יודע איך רקורסיה עובדת..או שסתם לקחת קוד?

תשים פה את הקוד של הרקורסיה שלך ואני יסביר לך..

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


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

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