שלח תשובה

זירת השאלות

878
צפיות
4
תשובות

top בשאילתת sql כששולפים משתי טבלאות

,‏ 17 במרץ, 2010

שלום,

באתר הזה אני משתמש בtop כדי לשלוף רק את 10 החידושים האחרונים עם הכי הרבה תגובות [תחת "דיונים בוערים"].
השאילתה נראית כך:

SELECT top 10 article.ID, COUNT(articleID) as countarticle, articleID, article.sub FROM article, tb WHERE articleID = article.ID GROUP BY articleID, article.ID, article.sub

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

השאילתה בעצם "סופרת" לפי הcount. כלומר, אם מספר התגובות יהיה שונה 10 פעמים, אז באמת יופיעו רק 10 חידושים..

יש דרך לפתור בעיה זו?

תודה

תגיות:

4 תשובות

  1. rjnhojbht הגיב:

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

    אך השאלה בעינה עומדת ואשמח לתשובה..

  2. לא מובן
    אם אתה רוצה את ה-10 החדשים ביותר קודם כל כדאי שתמיין התוצאות עם ORDER BY

    שנית מה שאתה אומר זה שבעצם השאילתא מחזירה את כל החידושים במקום רק 10 עליונות?


    אלי ענתבי

  3. rjnhojbht הגיב:

    התכוונתי ל..
    אני לא רוצה את החדשים ביותר, אלא את החידושים עם הכי הרבה תגובות. החידושים שנמצאים תחת "דיונים בוערים" בצד שמאל.

    כמו שניסיתי להסביר קודם, השאילתא מחזירה עשרה חידושים שיש להם מספר תגובות שונה. [לדוג', עם יהיו 20 חידושים שלכל אחד מהם 10 תגובות אז כולם יוצגו אך אם יהיו 20 חידושים שלכל אחד מספר תגובות שונה יוצגו רק עשרה חידושים].

  4. eyal453 הגיב:

    נראה לי שזה מה שאתה מחפש?
    אתה צריך ליצור VIEW שבעצם מכיל את ה ID של הדיון ומספר כולל של תגובות.
    select DiunID,COUNT(responses) as TotalResponses from blah… GROUP BY
    עכשיו מפה אתה יכול לקשר את הטבלה של הדיונים ל VIEW הזה ולהוציא
    select * from whatever where MIN(TotalResponses)>10

שלח תשובה