שלח תשובה

זירת השאלות

659
צפיות
25
תשובות

ערב טוב, שאלה בקשר להוצאת שאילתא…

,‏ 16 במרץ, 2004

יש לי 2 טבלאות.
1) נושאים של הפורום
2) תגובות של הפורום.
לא חשוב למה עשיתי ככה , אני רושם את זה כי בטח עכשיו אנשים יגידו לי למה לא עשית הכל בטבלה 1 ולא רשמת סטטוס אב וסטטוס בן.

השאלה שלי היא כזאת, אני רוצה 4 או לא חשוב כמה 6 או 7 נושאים אחרונים
שהכמות התגובות שיש בנושאים ההם הכי גדול.

אני משתמש בבסיסי נתונים של SQL SERVER.
תודה מראש על העזרה..

תגיות:

25 תשובות

  1. mrmistory הגיב:

    תגובות של הפורום=תגובות של הנושאים.

  2. mrmistory הגיב:

    עיד בעיה בשאילתא 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")

    תודה לעוזרים.

  3. ניר טייב הגיב:

    לא בטוח שזה יעזור אבל
    נסה להציב את הערך שאתה רוצה להציג בתוך סוגריים ותראה את הקוד שלך בקובץ מצורף

  4. אוריקס הגיב:

    שאני אבין –
    אתה רוצה רק את הנושאים של X ההודעות האחרונות או את כל השרשור?

  5. ניר טייב הגיב:

    נסה כך


    SELECT Max("CountSee") FROM KorotHaim_Zamar ORDER BY Max("CountSee")

  6. ניר טייב הגיב:

    Uלדעתי הטעות שהייתה לך
    היא ששכחת לשים מרכאות בפעולה max

  7. mrmistory הגיב:

    את הנושאים….
    שיש בהם הכי הרבה תגובות.

  8. mrmistory הגיב:

    לא עובד, הנה למה….
    תראה, אני עשיתי שאילתא לפי מה שרשום פה באתר הזה.
    זה בדיוק מה שרשום


    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")"
    —————————^

  9. ניר טייב הגיב:

    נסה כך


    SqlBestForums="SELECT Max(""CountSee"") FROM KorotHaim_Zamar ORDER BY Max(""CountSee"")"

  10. ככה


    SqlBestForums="SELECT Max(CountSee) FROM KorotHaim_Zamar ORDER BY Max(CountSee)"

  11. אוריקס הגיב:

    נסה כך


    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)

  12. אוריקס הגיב:

    —-
    responses זה שם טבלת התגובות, roots זה שם טבלת הנושאים.

  13. אוריקס הגיב:

    וגם
    fatherID זה העמודה שיש בשתי הטבלאות ומציינת את ההתאמה בין אב השרשור לבנים שלו.

  14. mrmistory הגיב:

    זה מה שהוא מראה לי…


    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")

    מוזר ביותר 🙁

  15. mrmistory הגיב:

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

  16. כי לא נתת לו שם
    או שתתייחס אליו לפי אינדקס


    rs(0)

    או שתתן לו שם


    SqlBestForums="SELECT Max(CountSee) as CountSee FROM KorotHaim_Zamar ORDER BY Max(CountSee)"

  17. אוריקס הגיב:

    עוד טיפה פירוט:
    responses- טבלת התגובות
    roots – טבלת האבות

    fatherID – שדה מפתח בטבלה roots
    השדה הזה קיים גם בטבלה responses ומציין לאיזה שרשור שייכת כל הודעה.

    id – שדה מפתח פשוט בטבלה responses.

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

  18. mrmistory הגיב:

    תודה והנה קצת פרטים…
    הנה השאילתא שצריכה לצאת לפי הפרטים שלי שיש ב-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

  19. אוריקס הגיב:

    נסה את זה:


    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) "

  20. mrmistory הגיב:

    תודה גבר, זה עבד….
    אתה תוכל עכשיו להסביר את השאילתא פחות או יותר כדי שאני לא יעשה כמו
    COPY ו-PASTE מבלי לדעת מה אני עושה?

  21. אוריקס הגיב:

    בטח
    נתחיל מהסוף – השאילתה הגדולה:
    היא בוחרת את מספר ההודעה הראשית, נושא ההודעה הראשית, כשהמספר נמצא באוסף הערכים שמחזירה השאילתה הקטנה [ההיא בתוך הסוגריים], וכמובן מסדר בסוף. [לכן השתמשנו באופרטור In].

    עכשיו לשאילתה הקטנה שאמורה להחזיר את מספרי ההודעות של חמשת ההודעה שיש להן הכי הרבה תגובות. השאילתה היא שאילתת קיבוץ שמחזירה רשומות ובהן מס' ההודעה הראשית ומספר התגובות לה, ומסדרת בסדר יורד. משם הוא מחזיר את חמשת הראשונים וזה משלים לנו את אוסף הערכים שהשאילתה הגדולה משתמשת בהם…

    ד"א – אני חושב שזה צריך להיות Count במקום Sum… אמנם לא צריכה להווצר לך שגיאה אבל זה גם לא ממש נכון ככה

שלח תשובה