php / יצירת דיון רב ממדי עם PHP ו-MYSQL / פרטי הנושאים

פרטי הנושאים



בואו נניח שאנחנו רוצים לראות את ההודעות שהוצבו כתגובה לנושא "מה כדאי לאכול לארוחת צהריים". אנחנו נבחר את הנושא ונקרא לקובץ בשם display_topic.phtml בתהליך שמתרחש אנחנו מעבירים את מספר הנושא (במקרה שלנו, 21) ל- querystring נקנח בפונקצית DisplayTopic שתריץ את השאילתה הבאה:

select distinct t.topic_id, t.parent_id, t.root_id, t.name , t.description, t.author, t.author_host, t.create_dt, t.modify_dt , p.name , r.name

from px_topics t

left join px_topics p on t.parent_id = p.topic_id

left join px_topics as r on t.root_id = r.topic_id

where t.topic_id = 21


גם הפעם פיצלנו את הטבלה לשני חלקים, רק שהפעם ביצענו צירוף עם חלק חיצוני.
מה זה צירוף עם חלק חיצוני? ( Join) הצירוף הזה מאחד בין שתי טבלאות המתבססות על ערכים שווים בשדה מסוים. טוב ויפה, אבל כאן אנחנו רוצים גם לאחד את הטבלאות וגם לשאוב מידע מחלק שלישי שאין לו קשר עם הטבלאות האחרות. בדוגמה שכאן, אנחנו רוצים את כל השורות מ-T, גם אם אין שום התאמה עם parent_id או root_id .

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

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

topic list | new topic

What should we have for lunch? by Mr. Rogers
(206.221.192.49) on 19990312185429
Let's not tell King Friday we're going.
Reply to this

Comments:
Re: What should we have for lunch? by King Friday ( 22 )
Tell him what?
· Re: Re: What should we have for lunch? by Mr. Rogers ( 23 )
· Uh oh! by King Friday ( 24 )


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

בראש ובראשונה היא מתיחסת לנושאים שנובעים ישירות מתוך נושא 21 :

select topic_id, name, author, create_dt, description

from px_topics

where parent_id = 21

order by create_dt, topic_id


לאחר מכן, למען כל תגובה ותגובה, הפונקציה מציגה את הכותרת ואת התגובות לאותה תגובה:

select topic_id, name, author, create_dt, description

from px_topics

where parent_id = 23

order by create_dt, topic_id


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

כעת נעמיד פנים שבחרנו בנושא 23 שלעיל.



עמוד הבא: התשובה >>




גרום ל-PHP לעבוד

מעבר זריז על הקוד

הנושאים העיקריים

פרטי הנושאים >

התשובה