צפיות
תשובות
עזרה בכתיבת קוד – בקשר לתאריכים
שלום,
יש לי טבלה במסד נתונים שבה יש נתונים מכמה סוגים:
עמודה של שמות
עמודה נוספת של מספרים
ועמודה נוספת של תאריכים (בפורמט הזה: 01/07/2008)
אני עובד על מין מערכת של סטטיסיקה ואני רוצה להציג כמה נתונים;
לבדוק כמה משתמשים נרשמו לפי רבעונים בשנה.
לדוגמה:
רבעון זה שלושה חודשים בשנה (ינואר עד מרץ, אפריל עד יוני וכו').
כך ייראה המסד
שם: ישראל ישראלי | תאריך הרשמה: 30/01/2008
שם: שיר שירן | תאריך הרשמה: 30/03/2008
שם: שקר כלשהו | תאריך הרשמה: 30/09/2008
אני רוצה לכתוב קוד שמחשב כמה משתמשים נרשמו ברבעון.
התוצאה תהיה:
2 משתמשים נרשמו ברבעון הראשון לשנה.
1 משתמש נרשם ברבעון השני לשנה
וכן הלאה (רבעון שלישי ורביעי).
שאלה נוספת:
איך אני כותב קוד שסופר לי רק ערכים ייחודיים בטבלה?
לדוגמה:
חגי
חגי
חגי
ישראל
משה
התוצאה תהיה 3 (ערכים ייחודים) מתוך רשימה של X…
אשמח לעזרה והכוונה.
תודה מראש ושבת שלום,
חגי
9 תשובות
תשובה
זה די פשוט.
תריץ לולאת FOR למשל שתתקדם כל פעם ב-3 עד 12 חודשים (For m=0 To 12 Step 3).
כל פעם בלולאה תריץ שאילתה על טווח התאריכים שלה (3 חודשים) בטבלה שלך, היכן שתאריך הרשמה נמצא בין החודשים בלולאה ושישלוף הכל, ידפיס נתונים או למערך כלשהו (לא הכי יעיל).
בנוגע לכפילויות נתונים, יש לך את DISTINCT:
https://webmaster.org.il/article.asp?id=21
בהצלחה.
"החיים הם רק הדרך במסע הנפש", בילד 2004-2008 <img src='/images/6.gif'>
http://Www.Torec.Net * http://Www.Torec.In
שאלה…
הסתדרתי עם השאלה השנייה שלי בעזרת הצעתך – DISTINCT
אבל קצת קשה לי עם הלולאה (שאלה מס' 1).
תוכל לתת לי דוגמה?
תודה ושבוע טוב,
חגי
תשובה
אין כאן לתת דוגמא כי מדובר בקוד לא קצר, ואני לא יודע עם איזה מסד נתונים אתה עובד.
אתה צריך לעשות בעצם 4 שאילתות, כל שאילתה שולפת נתונים של 3 חודשים מהשנה, כך:
שאילתה 1: ינואר-מרץ
שאילתה 2: אפריל-יוני
שאילתה 3: יולי-ספטמבר
שאילתה 4: אוקטובר-דצמבר
כבר אולי עדיף ליצור פונקציה שתשלוף את הנתונים לפי תאריכים שתגדיר לה (מאיזה חודש ועד איזה חודש לשלוף), תציג את הנתונים כמו שצריך וכו' כדי לחסוך לך כפילויות של קוד.
"החיים הם רק הדרך במסע הנפש", בילד 2004-2008 <img src='/images/6.gif'>
http://Www.Torec.Net * http://Www.Torec.In
אין מישהו שיכול לעזור לי…
או להכווין אותי כיצד לכתוב פונקציה כזו?
אני לא כ"כ מנוסה בעניין.
אגב,
אני עובד עם מסד נתונים ACCESS.
תודה ויום טוב.
הנה דוגמא
sql = "select * from users order by writing_date desc"
set users = con.execute(sql)
dim rivon1, rivon2, rivon3, rivon4, rivon5, rivon1_counter, rivon2_counter,rivon3_counter, rivon4_counter
rivon1 = "01/01/2008"
rivon2 = "01/04/2008"
rivon3 = "01/07/2008"
rivon4 = "01/010/2008"
rivon5 = "01/01/2009"
do while not users.eof
if users.fields("writing_date") > rivon1 and users.fields("writing_date") < rivon2 then
rrivon1_counter = ivon1_counter + 1
end if
if users.fields("writing_date") > rivon2 and users.fields("writing_date") < rivon3 then
rrivon2_counter = ivon1_counter + 1
end if
if users.fields("writing_date") > rivon3 and users.fields("writing_date") < rivon4 then
rrivon3_counter = ivon1_counter + 1
end if
if users.fields("writing_date") > rivon4 and users.fields("writing_date") < rivon5 then
rrivon4_counter = ivon1_counter + 1
end if
loop
ויש דרך יותר הגיונית ויעילה
זה לעשות בSQL את הספירה לדוגמא:
sql_rivon1 = "select * from users where writing_date > #" & rivon1 & "# and writing_date < #" & rivon2 & "#"
sql_rivon2 = "select * from users where writing_date > #" & rivon2 & "# and writing_date < #" & rivon3& "#"
sql_rivon3 = "select * from users where writing_date > #" & rivon3 & "# and writing_date < #" & rivon3& "#"
sql_rivon4 = "select * from users where writing_date > #" & rivon4 & "# and writing_date < #" & rivon5& "#"
עכשיו צריך ליצור אובייקט קונקשן שתומך בספירת הרשומות ולהפעיל עליו את הSQL
אפשר גם בעוד דרך יעילה
אפשר לעשות שאילתה אחת בלבד שתשלוף נתונים בסידור לפי תאריך רק לפי השנה הנוכחית למשל , לפי מה שצריך.
בלולאה (DO WHILE / GETROWS – תלוי בכמות נתונים), לבדוק את תאריך ההרשמה ולהתאים אותו למשתנה "שיחזיק" את מחרוזת הנתונים לרבעון מסוים (4 משתנים) ופשוט להדפיס כל משתנה במקום הנכון בעמוד.
"החיים הם רק הדרך במסע הנפש", בילד 2004-2008 <img src='/images/6.gif'>
http://Www.Torec.Net * http://Www.Torec.In
שאלונת…
אם יש לי תאריך במסד, לדוגמה: 01/01/2008
איך אני יכול לשלוף כביכול את כל התאריכים במסד נתונים שרק החודש שלהם (הספרה האמצעית בתאריך) נע בין 0 ל-4?
אפשרי לקחת חלק מהתאריך?
נראה לי שככה זה יהיה יותר קל, לא?
תשובה לשאלונת והצעה נוספת…
יש להציב את השאילתה הבאה:
SELECT DatePart("q",[date]) AS rivon, Count(kod) AS CountMen
FROM tbl
GROUP BY DatePart("q",[date]);
(הפונקציה DatePart מחזירה חלק משנה, המפרמטר q מחזיר רבעון).
כמו"כ, ניתן להחזיר רק את החודש ע"י הפונקציה month(<date>)