659
צפיות
צפיות
25
תשובות
תשובות
ערב טוב, שאלה בקשר להוצאת שאילתא…
יש לי 2 טבלאות.
1) נושאים של הפורום
2) תגובות של הפורום.
לא חשוב למה עשיתי ככה , אני רושם את זה כי בטח עכשיו אנשים יגידו לי למה לא עשית הכל בטבלה 1 ולא רשמת סטטוס אב וסטטוס בן.
השאלה שלי היא כזאת, אני רוצה 4 או לא חשוב כמה 6 או 7 נושאים אחרונים
שהכמות התגובות שיש בנושאים ההם הכי גדול.
אני משתמש בבסיסי נתונים של SQL SERVER.
תודה מראש על העזרה..
25 תשובות
תגובות של הפורום=תגובות של הנושאים.
הקפצה ראשונה
עיד בעיה בשאילתא MAX
הנה השאילתא שאני עושה
"SELECT Max(CountSee) FROM KorotHaim_Zamar"
והנה השגיאה שאני רואה, לא מבין למה.
ADODB.Fields error '800a0cc1'
ADO could not find the object in the collection corresponding to the name or ordinal reference requested by the application.
/MusicWords_BySQL/WordMusic/SITE/index.asp, line 603
הנה שורה 603
Response.Write RsBestForums.Fields("CountSee")
תודה לעוזרים.
לא בטוח שזה יעזור אבל
נסה להציב את הערך שאתה רוצה להציג בתוך סוגריים ותראה את הקוד שלך בקובץ מצורף
שאני אבין –
אתה רוצה רק את הנושאים של X ההודעות האחרונות או את כל השרשור?
נסה כך
SELECT Max("CountSee") FROM KorotHaim_Zamar ORDER BY Max("CountSee")
Uלדעתי הטעות שהייתה לך
היא ששכחת לשים מרכאות בפעולה max
את הנושאים….
שיש בהם הכי הרבה תגובות.
לא עובד, הנה למה….
תראה, אני עשיתי שאילתא לפי מה שרשום פה באתר הזה.
זה בדיוק מה שרשום
Microsoft VBScript compilation error '800a0401'
Expected end of statement
/MusicWords_BySQL/WordMusic/SITE/INDEX.ASP, line 600
SqlBestForums="SELECT Max("CountSee") FROM KorotHaim_Zamar ORDER BY Max("CountSee")"
—————————^
נסה כך
SqlBestForums="SELECT Max(""CountSee"") FROM KorotHaim_Zamar ORDER BY Max(""CountSee"")"
ככה
SqlBestForums="SELECT Max(CountSee) FROM KorotHaim_Zamar ORDER BY Max(CountSee)"
נסה כך
SELECT roots.fatherID,roots.subject
FROM roots
WHERE roots.fatherID in (select top 5 sum(id),fatherID from responses group by fatherID order by sum(id) desc)
—-
responses זה שם טבלת התגובות, roots זה שם טבלת הנושאים.
וגם
fatherID זה העמודה שיש בשתי הטבלאות ומציינת את ההתאמה בין אב השרשור לבנים שלו.
תודה אבל מה זה id הזה ?
מס' סידורי של ההודעה
זה מה שהוא מראה לי…
ADODB.Fields error '800a0cc1'
ADO could not find the object in the collection corresponding to the name or ordinal reference requested by the application.
/MusicWords_BySQL/WordMusic/SITE/INDEX.ASP, line 616
והנה השורה הזאת.
Response.Write RsBestForums.Fields("CountSee")
מוזר ביותר 🙁
יענו ID=מפתח של התגובות לנושאים ?..
אם כן, ככה חשבתי ורשמתי וזה עושה בעיות.
כי לא נתת לו שם
או שתתייחס אליו לפי אינדקס
rs(0)
או שתתן לו שם
SqlBestForums="SELECT Max(CountSee) as CountSee FROM KorotHaim_Zamar ORDER BY Max(CountSee)"
תודה
עוד טיפה פירוט:
responses- טבלת התגובות
roots – טבלת האבות
fatherID – שדה מפתח בטבלה roots
השדה הזה קיים גם בטבלה responses ומציין לאיזה שרשור שייכת כל הודעה.
id – שדה מפתח פשוט בטבלה responses.
אני מניח שכך בנוי הדיבי שלך, בטח עם שמות אחרים במקצת….
אם הוא בנוי כך – מה השגיאה? מה הוא מציג?
ואם לא אז איך הוא בנוי?
תודה והנה קצת פרטים…
הנה השאילתא שצריכה לצאת לפי הפרטים שלי שיש ב-DB
SqlBestForums="SELECT ForumNosim.IdNose,ForumNosim.NameNose " _
& " FROM ForumNosim " _
& " WHERE ForumNosim.IdNose in (SELECT TOP 5 SUM(IdMessage), " _
& " IdNose FROM ForumMessages GROUP BY IdNose " _
& " ORDER BY SUM(IdMessage) desc) "
אני עובש אם DB של SQL SERVER
וזאת השגיאה שאני מקבל.
Microsoft OLE DB Provider for SQL Server error '80040e14'
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
/MusicWords_BySQL/WordMusic/SITE/INDEX.ASP, line 614
והנה השורה 614
RsBestForums.Open SqlBestForums,ConnBestForums,adOpenStatic
נסה את זה:
SqlBestForums="SELECT ForumNosim.IdNose,ForumNosim.NameNose " _
& " FROM ForumNosim " _
& " WHERE ForumNosim.IdNose in (SELECT TOP 5 " _
& " IdNose FROM ForumMessages GROUP BY IdNose " _
& " ORDER BY SUM(IdMessage) desc) "
תודה גבר, זה עבד….
אתה תוכל עכשיו להסביר את השאילתא פחות או יותר כדי שאני לא יעשה כמו
COPY ו-PASTE מבלי לדעת מה אני עושה?
בטח
נתחיל מהסוף – השאילתה הגדולה:
היא בוחרת את מספר ההודעה הראשית, נושא ההודעה הראשית, כשהמספר נמצא באוסף הערכים שמחזירה השאילתה הקטנה [ההיא בתוך הסוגריים], וכמובן מסדר בסוף. [לכן השתמשנו באופרטור In].
עכשיו לשאילתה הקטנה שאמורה להחזיר את מספרי ההודעות של חמשת ההודעה שיש להן הכי הרבה תגובות. השאילתה היא שאילתת קיבוץ שמחזירה רשומות ובהן מס' ההודעה הראשית ומספר התגובות לה, ומסדרת בסדר יורד. משם הוא מחזיר את חמשת הראשונים וזה משלים לנו את אוסף הערכים שהשאילתה הגדולה משתמשת בהם…
ד"א – אני חושב שזה צריך להיות Count במקום Sum… אמנם לא צריכה להווצר לך שגיאה אבל זה גם לא ממש נכון ככה