יש לנו מערכת מאמרים, שנמצאת בטבלת article, בהן העמודות:
- הת.ז. של המאמר (מספר) articleId
- תמונת המאמר (מחרוזת) articlePic
- תאריך הכנסת השורה (תאריך) articleDate
ואנחנו רוצים להציג לקורא את חמשת המאמרים האחרונים, נשתמש בפקודת TOP, רק בכיוון ההפוך. פקודת TOP תיתן לנו את השורות הראשונות שהוזנו, ואנחנו צריכים את האחרונות.
- הת.ז. של המאמר (מספר) 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#)
אין תגובות:
הוסף רשומת תגובה