יום ראשון, 10 במרץ 2013

mssql סינון השורות האחרונות כולל תנאי

יש לנו מערכת מאמרים, שנמצאת בטבלת article,  בהן העמודות:
- הת.ז. של המאמר (מספר) articleId 
- תמונת המאמר (מחרוזת) articlePic  
- תאריך הכנסת השורה (תאריך) articleDate 

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


SELECT TOP 5 * FROM dbo.article 
ORDER BY articleDate DESC

בשימוש בפקודה ORDER BY articleDate DESC אנחנו מסננים את חמשת התוצאות מהסוף. כמו מיון מת' עד א' [הפקודה ההפוכה היא ASC שמורה למיין מא' עד ת']

ישנה אפשרות אחרת, לבצע חיפוש מהי הכתבה האחרונה, ולבצע SELECT על כל הID של הכתבות מהמספר האחרון פחות חמש.
SELECT * FROM dbo.article 
WHERE articleId > 
(SELECT MAX(articleId) - 5 FROM dbo.article)

בבעיה שלנו נתבקשנו לעשות תנאי בתוך תנאי, למצוא את כל הכתבות שיש להם תמונה, ומתוכם למצוא את חמשת האחרונות.
כמובן שהחיפוש השני לא יעיל כאן, כי ייתכן שבכלל בכל הID ש"נתפס" בתוך השאילתא - לאף אחד אין בכלל תמונה. לכן חוזרים לשאילתא הראשונה ונשכלל אותה:
SELECT TOP 5 * FROM dbo.article 
WHERE articlePic  !=  ''
ORDER BY articleDate DESC
חשוב לשים לב שהתנאי הראשון הינו שעמודה picArticle  לא תהיה ריקה ולכן נשמש בהגדרת מחרוזת בMSSQL ע"י שני גרשיים (ולא מרכאות, כמו שאנחנו רגילים מJS או C#)

אין תגובות:

הוסף רשומת תגובה