שלום

Kodak997

New member
שלום

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

SpecialNight

New member
תשובות

1. בקשר לשאלה אחד...למה שלא תשתמש ב count כדי לדעת אם יש לכל תמונה יותר מקטגוריה אחת? 2. תמיד רצוי שיהיה מזהה לכל רשומה ותמיד טוב להוסיף id גם אם בשלבים מוקדמים זה לא נראה לך רצוי.
 

Kodak997

New member
כן חשבתי על count

אבל אני לא יודע איך לשלב את זה. כאילו מבחינה רעיונית בכלל. השאילתה (ולא אין לי חתולים שם..):
strSql = "SELECT * " strSql = strSql & " FROM Gallery_Pics, Gallery_Cats, Gallery_Pics_Cats" strSql = strSql & " WHERE Gallery_Cats.CatId=" & iCatId strSql = strSql & " AND Gallery_Cats.CatId=Gallery_Pics_Cats.CatId" strSql = strSql & " AND Gallery_Pics.PicId=Gallery_Pics_Cats.PicId"​
איך אני משלב פה את Count? iCatId: משתנה שמגיע מה-QS Gallery_Pics_Cats: הטבלה המקשרת והשאר מובן.. תודה.
 

Kodak997

New member
רגע

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

לא חובה "ID", אבל רצוי מאוד שיהיה מפתח ראשי ייחודי לכל רשומה (שבמקרה שלך יכול להיות מורכב משתי העמודות יחד).
 

Kodak997

New member
רגע, לא הבנתי את המשפט האחרון שלך

"(שבמקרה שלך יכול להיות מורכב משתי העמודות יחד)" בקיצור- אפשר להגיד שלכל רשומה בכל טבלה, חייב להיות מפתח ראשי ייחודי שלא תלוי באף טבלה אחרת?
 

nirtheking

New member
אם הטבלה המקשרת מכילה רק

שני עמודות בלבד שהאחת היא מטבלת התמונות והשנייה מטבלת הקטגוריות לא חובה להגדיר מפתח ראשי כי האקסס יעשה לבד את הפעולה מה שנקרא "מפתח על" "מפתח על" - מפתח שהאקסס מייצר, המפתח בלתי נראה לעין אך בפועל לא מאפשר ששני רשומות יחזרו על עצמן (פרט בפרט) נגיד יש לנו את שני הרשומות האלו:
|d1| |c2| |b1| |a2| |d1| |c2| |b1| |a2|​
אז הוא ימחוק את הרשומה השנייה ויודיע על כך ב-ALERT
 

Kodak997

New member
מצד אחד

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

Kodak997

New member
אוקיי אז תני לי להבין שהבנתי../images/Emo13.gif:

אם מגדירים שני שדות כמפתח ראשי בעצם מה שאקסס עושה זה לא מרשה שיהיה פעמיים את אותם שני הערכים באותם שדות, לדוגמה שהקשר "תמונה 2 שייכת לקטגוריה 1" יופיע יותר מפעם אחת (רק ש-nirtheking אמר פשוט לא לקבוע אותם בתור מפתח ראשי ושאקסס יעשה את זה לבד). מה שאני עשיתי זה להוסיף עוד ID, ולהגדיר את {שלושת} השדות האלה כמפתח ראשי, ככה שלא היה מצב שאקסס היה מונע כפילויות, בגלל שתמיד ID היה יחודי כי הוא אוטונמבר. נכון? נ.ב. אשמח אם מישהו יעזור לי בעניין של הCOUNT כי זה באמת מטריד. תודה.
 
אפשר

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

Kodak997

New member
כן כן כמובן

רק ניסיתי להבין את הטעות שלי
תודה
 
מפתח ראשי

לא חייב להיות מורכב מעמודה אחת. הוא יכול להיות מורכב משתי עמודות (ויותר) שהשילוב בינהן הוא ייחודי.
 

Kodak997

New member
אני אשאל את השאלה עוד פעם

זאת שאילתה שמוצאת בכמה קטגוריות מופיעה תמונה מס'1.
SELECT COUNT(Gallery_Pics_Cats.CatId) AS Kamut FROM Gallery_Pics, Gallery_Pics_Cats WHERE Gallery_Pics.PicId = 1 AND Gallery_Pics.PicId = Gallery_Pics_Cats.PicId;​
השאלה איך אני יכול לשלב אותה יחד עם השאילתה הקודמת, לשאילתה אחת, שפשוט תוסיף לכל תמונה עוד שדה שבו יהיה כמה פעמים היא מופיעה. אפשרי?
 

Kodak997

New member
הדפדפן מציג שגיאות סקריפט בג'יבריש

איך להימנע מזה? (ניסיתי לשחק עם ה-encoding וכמובן ש"הצג שגיאות HTTP ידידותיות" מכובה)
 
למעלה