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 שלעיל.
עמוד הבא: התשובה >>
|