צפיות
תשובות
מחפש פיתרון יציאתי ויעיל
שלום לכולם, נוצרה לי בעיה באחד הפרויקטים שאני עובד עליהם ואני מחפש פיתרון יצירתי שיעזור לי לשים קץ לבעיה שנתקלת בה.
אז ככה הפרויקט שאני עובד עליו שייך לסטטיסטיקה של משחקי ספורט, כרגע זה עוסק במשחקי כדורגל מליגות שונות.
ועכשיו לבעיה.
יש לי טבלה, במסד הנתונים, שמכילה את היסטורית המשחקים של 15 ליגות שונות מרחבי העולם.
הטבלה עצמה בנויה כך שהיא מציגה את קבוצהת הבית/חוץ והתוצאה שהייתה במפגש בין השתיים.
לכל רשומה יש גם שדה של קוד מזהה הליגה, העונה בה שוחק המשחק, תאריך המשחק.
עכשיו ה שאני צריך לעשות זה להוסיף שדה חדש לטבלה הזאת שבעצם יציין לי את המחזור של המשחק הנוכחי, זאת אומרת שכל רשומה, בסופו של דבר, תכיל בתוכה שדה שאומר איזה מחזור המשחק הנוכחי.
ניסתי המון דרכים אך ללא הועיל, אחת הדרכים שחשבתי עליהם, ואיפלו ניסיתי, זה לעשות את מה שאני מבקש בדרך הבאה.
בניתי פונקציה שמקבלת את העונה, מספר של הליגה, מספר של קבוצה ותאריך של המשחק.
הפונקציה עצמה מחשבת עבור אותו משחק איזה מחזור הוא ומחזירה את מספר המחזור בשיטה הבאה.
תחילה הפונקציה שולפת את כל המשחקים של הקבוצה שצוינה שנמצאים באותה ליגה שצוינה באותה עונה ושהתאריך של המשחקים יהיה קטן או שווה לתאריך שנשלח לפונקציה.
כך בעצם חישבתי כמה רשומות עלו בתוצאות וזה בעצם מספר המחזור של המשחק.
לצערי התגלו המון טעויות שהתחלתי לבדוק את הפלט, והשיטה שהצעתי ירדה לטמיון.
חשבתי על שיטה נוספת, שבעצם שולפת קודם כל את כל הקבוצות שיש בליגה בעונה הנוכחית, ואז עוברת על כל קבוצה ומבצעת את הדברים הבאים.
עוברת על כל המשחקים של הקבוצה, שממויינים לפי התאריך שלהם (מהראשון לאחרון) ומזינה בעצם מספר רץ שמציין את המחזור למשחק.
לצערי גם שיטה זאת לא עובדת ולאחר מאמצים רבים, הגעתי לסף ייאוש ועכשיו אני פונה לקהל הגולשים באתר, שתמיד עזר לי במידה והייתי צריך עזרה בעבר, אני מאוד אשמח לקבל עזרה מכל גולש באתר.
כל רעיון לפיתוח של הדבר הזה יתקבל בברכה ואני פתוח לשמוע כל דעה לגבי הדרכים שניתן לבצע את הנושא הזה.
יש לציין רק שמדובר על טבלה שמכילה למעלה מ 50000 רשומות שהם נתונים של 15 ליגות שונות מהעולם במשך 10 השנים האחרונות ואני אמור לעדכן לכל משחק את מספר המחזור שלו.
אשמח עוד יותר אם יהיו תגובות מהירות, משום שהנושא מאוד דחוף לי.
שוב פעם תודה לכל מי שעוזר.
6 תשובות
נסה לנתח את השגיאות
לפי מה נקבע מחזור (וסליחה על הבורות), אתה חישבת לפי המשחקים שהקבוצה ביצעה וזה לא עובד, למה? יכול להיות שקבוצה לא משחקת בשבוע מסויים אבל המחזור כן התקדם?
אולי אם תאזן בין המספרים לפי תאריכים, כלומר כל קבוצה תקבל את מספר המחזור לפי המונה שלה ובלבד שאין קבוצה שבאותו טווח תאריכים של המחזור (שבוע?) קיבלה מספר יותר גבוהה, אם יש קבוצה כזו כולם יקבלו את הגבוהה.
האם המחזור תלוי בשבוע בו התקיים המשחק מאז תחילת הליגה? אם כן יכול להיות שחישוב מספר השבועות (אם אין בעיות של חגים וכד') יעזור
נסה לרדת לעומקה של קבוצה אחת בליגה אחת שהשיטה שלך הניבה בה שגיאה ותבדוק איפה הפיספוס, זה קצת משעמם אבל בדרך כלל עובד.
בדוק את זה
כמובן זהו פסודו קוד, שלא הורץ ולא נופה משגיאות.
תעדכן אם זה עזר [עבדתי על זה 15 דקות תמימות!]
set rs = con.open "select * from futbolHistori order by id"
do while not rs.eof
set rs2 = con.open "select * from futbolHistori where "
" sizn=" & rs("sizn") //עונה
" and liga=" & rs("liga") & " //ליגה
" and Groump_id=" & rs("Groump_id") & " //קבוצה
"order by datePlay" //תאריך משחק
roundNum=1
do while not rs2.eof or rs("id") <> rs2("id")
roundNum = roundNum + 1
rs.movenext
loop
rs2.close()
con.open "update futbolHistori set round=" & roundNum
rs.movenext
loop
תיקון קטן
כמובן
set rs = con.open "select * from futbolHistori order by id"
do while not rs.eof
set rs2 = con.open "select * from futbolHistori where "
" sizn=" & rs("sizn")
" and liga=" & rs("liga") & "
" and Groump_id=" & rs("Groump_id") & "
"order by datePlay"
roundNum=1
do while not rs2.eof or rs("id") <> rs2("id")
roundNum = roundNum + 1
rs.movenext
loop
rs2.close()
con.open "update futbolHistori set round=" & roundNum & " where id=" & rs("id")
rs.movenext
loop
לא ממש עובד
זה מזין לי בכל המשחקים את הערך33 שזה בעצם המחזור האחרון של הליגה שבדקתי, במקרה הזה זה היה הליגה הישראלית שיש שם 33 מחזורים.
לא זה מה שביקשתי, אני צריך שכל משחק קבל את המחזור שלו.
גם עברתי על הקוד שלך, דבר ראשון הוא לא עובד אלא אם כן משנים שם כמה דברים.
בלולאה השניה לא הבנתי מה עשית
rs("id") <> rs2("id")
מה התכוונת ?
rs.movenext
גם טעות זה צריך להיות של rs2.
בקיצור הקוד לא עובד.
אשמח לקבל עוד עזרה.
ותודה לך על העזרה.
אוקיי , אז ככה
הקוד לא אמור לרוץ. זהו "פסודו קוד". הוא נועד לתת לך כיוונים ורעיונות ולא לעבור קומפילציה או לעבוד פיקס.
set rs = con.open "select * from futbolHistori order by id"
do while not rs.eof
set rs2 = con.open "select * from futbolHistori where "
" sizn=" & rs("sizn") //עונה
" and liga=" & rs("liga") & " //ליגה
" and Groump_id=" & rs("Groump_id") & " //מס' קבוצה
"order by datePlay" //תאריך
roundNum=1
do while not rs2.eof and rs("id") <> rs2("id") //מונה את מס' המחזור
roundNum = roundNum + 1
rs2.movenext
loop
rs2.close()
con.open "update futbolHistori set round=" & roundNum & " where id=" & rs("id")
rs.movenext
loop
rs.close()
[הבנתי גם באופן שונה מקודם את המושג "מחזור". ]
בהצלחה
מה זה ?
למה אתה מתכוון שאתה רושם את זה
do while not rs2.eof and rs("id") <> rs2("id")
מה אתה מכוון שאתה רושם את הדבר הזה ?
rs("id") <> rs2("id")
מקודם זה לא עבד אז הורדתי את הדבר הזה.
תסביר לי מה ניסית לעשות שאני אבין.