שאלה רצינית באקסס

kaligola

New member
שאלה רצינית באקסס

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

belzerd

New member
שאלות תשובות

אם הבנתי נכון את שאלתך, אתה צריך לבנות שאילתה שמכילה טבלת תשובות אחת ו- 2 טבלאות של השאלות (ע"י alias).
 

גרי רשף

New member
לא הבנתי איך הטבלה בנויה../images/Emo22.gif

האם לכל שאלה יש שדה (עמודה) או שלכל שאלה יש רשומה (שורה)? אשמח לעזור אם אקבל תשובה ברורה.
 

zivsh103

New member
תשובה

לא ברור מה מטרת התרגיל, אבל אם הבנתי שתמיד יש זוגות של שאלה\תשובה וגם המשתמש מזין 2 תשובות ל-2 שאלות אז אולי טבלת התשובות תראה כך: קוד משתמש | קוד שאלה 1 | קוד שאלה 2 | קוד תשובה 1 | קוד תשובה 2 כאשר 3 השדות הראשונים מתפתחות. אני מניח שטבלה 1 נראית כך: קוד שאלה 1 | קוד שאלה 2 | קוד תשובה 1 | קוד תשובה 2 כאשר 2 השדות הראשונים מתפתחות. אז השאילתא תהיה: select count(*) from table1, table 2 where kod_mishtamesh=17 and table1.kod_sheela1=table2.kod_sheela1 and table1.kod_sheela2=table2.kod_sheela2 and table1.kod_tshuva1=table2.kod__tshuva1 and table1.kod_tshuva2=table2.kod__tshuva2 לחישוב הציון של משתמש 17
 

kaligola

New member
אולי לא הסברתי טוב

למשתמש יש טבלה אחת עם שתי עמודות בלבד ! : קוד שאלה, קוד תשובה. בנוסף ישנה טבלת זוגות עם 4 עמודות : שאלה1,תשובה1,שאלה2,תשובה2. אם זוג כלשהו בטבלת הזוגות מתקיים בטבלת המשתמש, אז ישנה ספירה (COUNT). לדוגמא , אם בטבלת הזוגות ישנה רשומה בעלת הנתונים הבאים : שאלה 42 - תשובה 1, שאלה 33 - תשובה 5. אזי אני רוצה לבדוק האם המשתמש ענה על שתי שאלות אלו כמו שהזוג ביקש. אם שני התנאים מתקיימים - אז סבבה. הבעייה היא שכאשר למשתמש יש 1000 שאלות, וטבלת הזוגות מורכבת ממאתיים זוגות, האקסס בונה מטריצה מסובכת וארוכה מאד לחישוב (כמה דקות טובות) ואני מחפש דרך יעילה יותר , נכונה ומהירה.
 

zivsh103

New member
כן...

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

kaligola

New member
ושוב...

המשתמש לא צריך לדעת מכל הדברים האלו. מבחינתו יש 500 שאלות שונות שהתשובה עליהן היא כן או לא , והוא עונה עליהן לפי סדר מסוים ובלתי נתן לשינוי. שאלה אחת בכל פעם. השאילתא שאני רוצה לבנות אמורה לבדוק האם זוגות מסוימים מתקיימים אצלו. לא ניתן לשנות את הטבלה שלו ואת דרך המילוי שלה.
 

zivsh103

New member
אולי...

select count(*) from (select 1 from T1 where sf_check(user-code,q1,a1)=1 and sf_check(user-code,q2,a2)=1 (( כאשר T1 זו טבלת נתוני הזוגות. ה sf_check היא פונקציה (באורקל ניתן להפעיל פונקציה בשאילתא) הבודקת האם יש מופע q1,a1 למשתמש מסויים (שליפה פשוטה) בטבלת התשובות. אנא ציין מה המפתחות של הטבלאות (צריך להיות קוד שאלה\קודי השאלות בהתאמה) - אם שכחת אותם או אינדקסים, זן יכולה להיות סיבת האיטיות.
 

bugg

New member
אני מקווה שהבנתי...

טבלה1: שאלה, תשובה. טבלה2: שאלה1, תשובה1, שאלה2, תשובה2. ואתה רוצה לבדוק אם בין כל השאלות שהמשתמש ענה עליהן (כלומר הרשומות של שאלה-תשובה מטבלה1) יש זוגות של שאלות-תשובות (נכונות מן הסתם) לפי טבלה2, וכמה. נכון? (אני מקווה...) אז ככה. בשני שלבים. שלב ראשון, אתה רוצה את כל הזוגות מטבלה2 שהמשתמש ענה עליהן נכון. נכון? שלב שני, נספור כמה זוגות כאלה מצאנו.
Query1: SELECT q1, a1, q2, a2 FROM t2 WHERE (q1,a1) in (SELECT q,a FROM t1) AND (q2,a2) in (SELECT q,a FROM t1) Query2: SELECT Count(*) FROM Query1​
נדמה לי שמותר לכתוב ככה (האקסס שלי בבית קצת לא עובד, אז אין לי ממש איך לבדוק את זה...)
 

kaligola

New member
את זה כבר עשיתי בהתחלה...

ומכיוון שהוא שואב את הנתונים מאותה טבלה פעמיים, הוא יצור כמין מטריצה גדולה מאד וזמן החישוב שלה ארוך מאד. לכן כל הבעייה שלי היא לעשות את זה בצורה טריקית יותר ומהירה יותר אפילו דרך עשרים שאילתות אם אצטרך, כי מטריצה לוקח כשלוש דקות... תודה בכל אופן על הההתמדה....
 
למעלה