בעית שרשור הודעות

kensaggy

New member
בעית שרשור הודעות

שלום, אני כרגע בונה פורום ב PHP ו- MYSQL בשביל התרגול והלמידה.. עכשיו נתקלתי בבעיה שאני לא יודע איך לפתור.. ההודעות בפורום מוצגות כמו הפורמים של תפוז, אין לי בעיה בשרשור ממש אלא יותר בשליפת הנתונים..ז"א נגיד יש איזה הודעה ישנה עם התגובות שלה..עכשיו אני בא היום ומוסיף הודעה חדשה לגמרי..אז באופן טבעי היא מוצגת בראש העמוד, כי היא הכי חדשה..עכשיו באותו היום רק בזמן אחר (אחרי ההודעה החדשה), מישהו בא ומוסיף תגובה להודעה הישנה שאותה הזכרתי בהתחלה, אז מה שאמור לקרות זה שההודעה הישנה עם התגובה החדשה צריכה לעלות הכי למעלה..רק שזה לא עובד לי..היא נשארת למטה.. זה אומרת שצריך לסדר את ההודעות גפ לפי תאריך, אבל גם לפי שעה.. עכשיו מבנה הדיבי הוא כזה שהשדה שמכיל את התאריך הוא מסוג varchar בגודל 8 ןהשדה שמכיל את הזמן הוא מסוג time... זאת השאילתה שמוציאה את הודעות האב:
SELECT * FROM messages WHERE father=´".$id."´ AND forum=´".$forum."´"." GROUP BY id ORDER BY date,time desc LIMIT ".$offset.",".$perpage​
(ה LIMIT הוא בשביל עמודים..) וזאת השאילתה שאיתה אני מוציא את הודעות הבנים:
SELECT * FROM messages WHERE father=´".$id."´ AND forum=´".$forum."´"." ORDER BY date desc​
כל עזרה תתקבל בברכה.. אשמח מאד אם תוכלו לתקן לי את השגיאה, ולומר לי מה השאילתה שלי עושה שונה והשאילתה המתוקנת (לעתיד).. עוד דבר: בבקשה בבקשה על תשלחו אותי לתעוד של mysql..הייתי שם שעות ולא מצאתי פתרון.. תודה מראש חן נ.ב. מצטער על המגילה שכתבתי
 

shanor

New member
זה דיי תלוי בצורה של הטבלאות שלך

אבל בוא ננסה משהו. בוא ניקח את הדוגמה שלך: בשעה 12:00 בצהריים מוכנסת הודעה מספר 1. בשעה 13:00 מוכנסת הודעה מספר 2 (שהיא תגובה להודעה 1). בשעה 14:00 מוכנסת הודעה מספר 3 (גם היא תגובה להודעה 1). בשעה 15:00 מוכנסת הודעה מספר 4 (אבל היא תגובה להודעה מספר 2 ולא המשך). עכשיו אני אתייחס לזה כאילו בטבלאות שלך יש מפתח שהמטרה שלו היא להראות מה ההודעה השאליה כל הודעה משורשרת. ז"א שרשום שם שהודעה מספר 2 שייכת להודעה 1, והודעה 4 שייכת להודעה מספר 2 (לשדה הזה נקרא שדה השירשור)... ובנוסף מפתח שמראה מי ההודעה הראשית (ההודעה הראשונה). כל מה שצריך לעשות הוא דבר כזה: א. להוציא את כל ההודעות שקשורות להודעה הראשונה שלך (את זה עושים על ידי השדה האחרון שציינתי - השדה שמראה מי ההודעה הראשונה - הודעת האב/אם איך שתרצה לקרא לזה) כאשר התשובה צריכה להיות מסודרת לפי השדה של הההודעה שאליה היא משורשרת (לפי שדה השירשור) ואחר כך צריך לסדר לפי שני הקריטריונים שלך הזמן והתאריך (שלדעתי אפשר להכניס את שניהם במשתנה אחד של תא מסוג (TIMESTAMP(14 שיכלול תאריך מלא וזמן מלא). זהו. מקווה שהייתי ברור מספיק ונתתי לך קצה חוט להאחז בו. בברכה ובהצלחה שנאור. נ.ב. בכל מקרה כאשר אתה רואה שהשאילתות מסתבכות לך, אם אתה רוצה לפשט עיניינים תשתמש בהתחלה בטבלאות זמניות (יש פונקציה כזו ב- MYSQL).
 

kensaggy

New member
שנאור...

קודם כל תודה על ההיתיחסות
הבעיה שלי היא לא השרשור עצמו, שעל הבעיה הזאת הצעת לעשות שדה נוסף של מי האב.. הבעיה שלי רק במשיכת הנתונים מהטבלה לפי הסדר הנכון.. השרשור אצלי הוא בסדר (מבחינת הצגה)..ממש כמו בתפוז אפילו
... הבעיה היא שאם מישהו מגיב על הודעה ישנה שליפת הנתונים כבר לא נכונה וסדר הוצאת הנתונים שלי כבר לא עובד כמו שצריך.. הטבלה שלי נראת ככה :
CREATE TABLE messages ( id int(9) NOT NULL auto_increment, father int(9) default NULL, forum int(4) NOT NULL default ´0´, username varchar(20) NOT NULL default ´´, date varchar(8) NOT NULL default ´´, time time default NULL, subject varchar(100) default NULL, text longtext, PRIMARY KEY (id), UNIQUE KEY id (id) ) TYPE=MyISAM;​
אני דיי מתחיל עם mysql כך שעוד לא עבדתי עם timestamp..אני אנסה לשלב את ה date וה time ל timestamp ואולי זה יפתור לי את הבעיה.. כמובן עם יש פתרון אחר אשמח מאד לשמוע עליו
אהה...כן ..נזכרתי איפה ראיתי אז זה....בפורום של webmaster עם מגיבים על הודעה ישנה היא לא עולה למעלה..היא נשארת במקום..אני רוצה שכאשר יגיבו על הודעה ישנה היא תיהיה ראשונה... שאלתי בעוד מקום ואמרו לי להשתמש בפונקציה max אך לצערי (כמו שכתבתי) אני מתחיל עם mysql ועם בסיסי נתונים בכלל..ככה שלא הצלחתי להשתמש בה כדי לפתור את הבעיה.. ושוב, מצטער על המגילה
 

shanor

New member
אז פיספסתי משהו...

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

kensaggy

New member
לא משנה...

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