נוטה הפורום שלך עושה צרות...

קיפוש

New member
נוטה הפורום שלך עושה צרות...

זה המשפט SQL שלי sql = ``select tblForumIndex.*,tblForumMessages.* from tblForumIndex,tblForumMessages where ForumID =``&fourmid&`` and tblForumIndex.MessageID=tblForumMessages.MessageID order by tblForumIndex.RootID asc,tblForumIndex.ThreadID asc`` וזה יוצא די מחורבש צרפתי דוגמא
 
קל להאשים את המערכת. ;-)

אבל זה באשמתי... בערך... לא נתתי לך את חוק החוקים. החוק הכי חשוב הוא שאתה חייב לשמור על ההיררכיה הנכונה של ה-ThreadID ביחס ל-RootID. זאת אומרת שלכל RootID תהיה את הסדרה הנכונה והמסודרת שלו של ההודעות לפי סדר הופעתן ב-ThreadID. וזאת כל החוכמה... החוקיות הזאת היתה מה ששברה לי את הגולגולת ורסקה לי תאי מוח עדינים. אני אחסוך ממך את שברון הראש ואתן לך את החוקיות... או שאתה רוצה בכ``ז לשבור אותו בעצמך? :)
 

קיפוש

New member
אבקש ממך לחסוך לי את שעות המתמטיקה

לא בשעות כאלה של הלילה (-: תודה מראש..
 
לגיטימי... :) וזה לא מתמטיקה...

זו לוגיקה. וזה הולך ככה... דף העדכון הוא זה שאמור לעשות את כל החישובים. הוספה של הודעה ראשית חדשה זה החלק הקל... כל הערכים מקבלים אחד למעט שניים, שזה ה-RootID וה-MessageID ששניהם אמורים להיות זהים (רק כשמדובר בהודעה ראשית, כמובן). כשזאת הודעת תגובה, אז העסק מתחיל להסתבך... ואז גם נכנסת המתודיקה שדיברתי עליה... כדלקמן: אחרי שהכנסת את ההודעה החדשה לטבלה של tblForumMessages, תיקח את ה-ID שהיא קיבלה... זה ערך מפתח בחוקיות. הבדיקה הראשונה היא שאיבת ה-ThreadID של הודעה בעלת אותו ThreadID ו-RootID (כדי לדעת אם ההודעה החדשה תתווסף לסוף העץ או שהיא אמורה להתברג איפשהו באמצע). אם ישנה כזאת, שאיבת ה-ThreadID של הודעה בעלת LevelID נמוך יותר ו-ThreadID גבוה יותר (כדי לדעת אם ישנן הודעות שהן למעשה תגובות לרמות נמוכות יותר בעץ, השייכות לאותו Thread). אם הבדיקה האחרונה החזירה תוצאה חיובית, אתה צריך את ה-ThreadID של ההודעה האחרונה של אותו RootID (כדי לבנות לעצמך לולאה שתעדכן את כל ה-ThreadID שאמורים להשתרשר אחרי ההודעה הנוכחית). וההודעה הנוכחית משמרת את ה-ThreadID המקורי שלה. אם הבדיקה הראשונה כשלה, אז אתה צריך לחפש רק את ה-ThreadID של ההודעה האחרונה מאותו LevelID ו-RootID. ולהוסיף לו אחד, שזה ה-ThreadID של ההודעה הנוכחית. זהו... זאת התורה מאחורי הפורום שלי. ולקח לי קרוב לשלוש שעות לפצח את זה. :) אני יודע... יהיו כאלה שיפצחו את זה בפחות, בלה בלה בלה... אבל... מה לעשות. אני רק בן-אדם. ;-)
 

קיפוש

New member
מה לעזאזל קורה פה?

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

rmarko

New member
מה הרעיון מאחורי ThreadID?

לדעתי תצטרך להסביר מה כל אחד מה- IDים אומר בטבלה השניה (זאת שאינה tblForumMessages) כדי שקיפוש יבין. MessageID - הבנתי שזה ה- ID הייחודי של ההודעה ב- tblForumMessage (לפי מספור אוטומטי) RootID - הבנתי שזה ה- ID הייחודי של ההודעה שמהווה את שורש מבנה ההודעות (הטיפות הכחולות פה בתפוז) LevelID - אני מתאר לעצמי שמדובר ברמת ההזחה (indent) ---- עד כאן קלעתי? אם לא, איפה ההודעה הראשונה שבה אתה מסביר לקיפוש על הפורום שלך? אולי זה יעזור. אם כן - קיפוש עד כאן הבנת? עכשיו מה הרעיון שעומד מאחורי ThreadID - מדובר פה ב- ParentID או ... מה?
 

קיפוש

New member
ביואל ז``ל

http://www2.iol.co.il/communikit/scripts/forums/live/forums_single_25.asp?rootId=5320334&msg_id=5320460
 

rmarko

New member
ThreadID זה מספר ההודעות

שנכתבו בשורש הספציפי שבו אנחנו עונים +1?
 

קיפוש

New member
לפי מה שהבנתי

הוא נתן דוגמא בהמשך ואז נראה כי זה מספר התגובות להודעה +1
 

rmarko

New member
אה, פספתי את משפט המפתח

זה בהודעה האחרונה של הנוטה בפורום הזה - אתה צריך לבצע לולאה שמקדמת את כל ערכי ה- ThreadID שהם גדולים ממספר ה- ThreadID שאתה כותב עכשיו. נגיד יש לך מבנה שורש כזה (המספרים הם מספרי ה- ThreadID, הנקודות הן להזחה, ובעצם מהוות LevelID ויזואלי): ..1 .....2 .....3 .....4 ועכשיו אתה רוצה לענות להודעה עם ThreadID 2 - אתה מעדכן את זה עם 4 והופך אותו ל- 5, ומעדכן את זה עם 3 והופך אותו ל- 4; ואז 3 החדש משתחל לו יפה: ..1 .....2 .........3 (החדש) .....4 (היה קודם 3) .....5 (היה קודם 4) ולכל מבנה שורש הודעה יש סיפור כזה משלו.
 

קיפוש

New member
יפה..

הבנתי את הרעיון עכשיו.. אתה אולי יכול לעזור לי לפשט את ההכנסה ע``י איזה אלגוריתם מילולי?
 
האלגוריתם המילולים שכתבתי

למעלה, לא מספיק ברור?! מרקו אפילו פישט את זה עוד יותר... אני ממש תרגמתי לך את ה-ASP לעברית. :) הבדיקות אלה משפטי SQL, השאלות הן משפטי IF...
 

קיפוש

New member
מצטער אבל אני שונא בלאגן..

אני ינסה ותגיד לי איפה אני טועה 1. מכניסים את תוכן ההודעה לטבלת ההודעות ושומרים את הID החדש שלה --> NEW_ID 2.אם קיימת הודעה עם אותו ThreadID ואותו RootID כמו של ההודעה החדשה אזי 2.1 מוציאים את ה ThreadID של ההודעה עם LevelID נמוך יותר ו-ThreadID גבוה יותר 2.2. פה כבר איבדתי אותך אחרת 3. מוסיפים ל -ThreadID אחד ושומרים אותו בערך של ההודעה החדשה
 
אז ככה...

את צעד 2.1 שהגעת אליו, חשוב שתבין למה אתה בכלל עושה אותו. כך זה גם יעזור לך להבין את החוקיות טוב יותר... אם נתחשב בדוגמא שמרקו התותח נתן: ..1 .....2 .........3 (החדש) .....4 (היה קודם 3) .....5 (היה קודם 4) זה מצב קלאסי... זה מצב שבו כולם עובדים לפי הסדר. אבל... אם הבדיקה שמתבצעת בצעד 2.1 לא היתה מתקיימת, אז כשלמצב הזה היית מנסה להוסיף עוד הודעה ל-Thread 2, היה נוצר לך מצב כזה: ..1 .....2 .........3 (החדש) .....4 (ההודעה החדשה, שהיתה אמור להיות 6) .....5 (היה קודם 4) .....6 (היה קודם 5) לכן את תוצאת הבדיקה של 2.1 אתה מכניס ל-ThreadID של ההודעה הנוכחית ורק אז יוצר לך את הלולאה שמקדמת את כל מה שמתחת ל-Thread הזה, באותו RootID, ב-1. שהבדיקה השלישית, זאת שלוקחת את ה-ThreadID האחרון מאותו Root, מאפשרת לך. ואם אף אחד מהתנאים האלה לא מתקיים, משמע, זאת הודעה חדשה לגמרי ב-Thread... פשוט תוסיף אחד ל-ThreadID, וזה הכל. אל תתיאש... המהירות של הפורום שאתה מקבל מכל התהליך הזה שווה הכל. :)
 

קיפוש

New member
ניסיון שני..

1. מכניסים את תוכן ההודעה לטבלת ההודעות ושומרים את הID החדש שלה --> NEW_ID 2.אם קיימת הודעה עם אותו ThreadID ואותו RootID כמו של ההודעה החדשה אזי 2.1 מוציאים את ה ThreadID של ההודעה עם LevelID נמוך יותר ו-ThreadID גבוה יותר 2.2 מוסיפים לכל ההדעות 1 לשדה של ה ThreadID 2.3 מכניסים לטבלת האינדקס את הנתונים שלקטנו ומשנים את ThreadID לזה שמצאנו אחרת 3. מוסיפים ל -ThreadID אחד ושומרים אותו בערך של ההודעה החדשה השתפרנו? (-:
 

קיפוש

New member
שבוע טוב!

התחלתי כבר לעבוד למעשים.. במטרה לפשט את האלגוריתם וגילתי שבעצם קצת הסתבכתי.. עשיתי (אוף מה עם תגיות CODE) sql = ``select * from tblForumIndex where ThreadID =``&ThreadID&`` and RootID =``&RootID&`` order by LevelID asc,ThreadID desc`` ואז לכולם rs(``ThreadID``) =rs(``ThreadID``) +1 אבל אז לא הבנתי שני דברים 1. מה לעזאזל רציתי לעשות ב 2.3 מכניסים לטבלת האינדקס את הנתונים שלקטנו ומשנים את ThreadID לזה שמצאנו 2. אין בעצם שני .. תודה רבה כבר אמרתי?
 
ההודעה מאתמול

שנכתבה ב-14:24, מתארת לדעתי מצויין את הצורך בסעיף 2.3 שלך. שבו אתה מחפש את ה-ThreadID של הודעה שנמצאת ב-LevelID נמוך יותר (לאו דווקא אחד, אפשר ואפילו רצוי, יותר) וב-TheardID גבוה יותר. אם נמצא משהו כזה, אתה מכניס אותו ל-ThreadID של ההודעה הנוכחית. מוצא את ה-ThreadID האחרון של אותו RootID ומבצע לולאה שלילית (כזאת שסופרת לאחור) שמקדמת ב-1 את כל ה-ThreadIDים של כל ההודעות מה-ThreadID האחרון שמצאת עד ל-ThreadID שמצאת בסעיף 2.3, שוב, בספירה לאחור (חשוב). אם סעיף 2.3 לא מצא משהו, אתה מקדם את ThreadID ב-1, ומעדכן את tblForumIndex. :) ואני אשמח להסביר שוב. :)
 

קיפוש

New member
האמת שאני שמח שאתה שמח (-:

ברשותך... sql = ``select top1 * from tblForumIndex where ThreadID =``&ThreadID&`` and RootID =``&RootID&`` order by LevelID asc,ThreadID desc`` rs.open sql, conn, 2,2 if not rs.EOF then temp_ThreadID = rs(``ThreadID``) rs.close זה החלק של מציאת ה ThreadID להודעה החדשה.. עכשיו הסתבכתי עם הלולאה השלילית הזו ..אשמח אם תעזור.. נ.ב. מתי יהיה אפשר להכניס פה קוד נורמלי ומה עם הסמילים ?!?!
 
למעלה