חיפוש פוסטים אחרונים בSQL

יפעתת

New member
חיפוש פוסטים אחרונים בSQL

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

jonjac

New member
Acces? MySQL? PostgreSQL? SQLite? MS-SQL?

Acces? MySQL? PostgreSQL? SQLite? MS-SQL? Oracle? Sybase? DB2? Adabas? Berkeley DB? Teradata? XML? נא לציין שם מוצר. וגם הכי טוב יהיה לשתף אותנו בSELECT שדורש שיפור. כך נקבל תמונה טובה יותר על מבני הנתונים שלך.
 

יפעתת

New member
sql server

SELECT top 10 tbl_BlogPost.PostID ,tbl_BlogPost.blogID, PostDate ,PostTitle ,CategoryID,CategoryName, sum(case when dbo.tbl_BlogReplay.ReplayStatus=5 then 1 else 0 end) as countReplay, BlogName FROM dbo.tbl_BlogPost inner join dbo.tbl_Blog on tbl_BlogPost.blogid=dbo.tbl_Blog.blogid left join dbo.tbl_BlogReplay on dbo.tbl_BlogPost.PostID= dbo.tbl_BlogReplay.PostID inner join dbo.tbl_BlogCategories on dbo.tbl_BlogPost.CategoryID=dbo.tbl_BlogCategories.CategoryID where PostStatus=5 and blogstatus=1 group by tbl_BlogPost.PostID ,tbl_BlogPost.blogID, PostDate ,PostTitle ,CategoryID,CategoryName,BlogName order by tbl_BlogPost.PostID desc​
תודה
 

גרי רשף

New member
אני מציע כך

כנראה שבאחד ה-Joins חסר תנאי וזה גורם להכפלת רשומות. במקרים כאלה אני נוהג כך: החליפי לצורך הבדיקה את כל ה-Select ב-* Select, "צבעי" עם הסמן רק את ה-Select ה-From ובדקי כמה רשומות חוזרות. "צבעי" עם הסמן את הנ"ל יחד עם ה-Join הראשון והתנאים שלו ובדקי כמה רשומות חוזרות. המשיכי כך עם כל ה-Joins. קרוב לוודאי שתוכלי להבחין כך איזה Join מכפיל לך את הרשומות, ואף למצוא את התנאי החסר.
 

יפעתת

New member
השאילתה בבסיס שלה עובדת נפלא. אני מחפשת

משהו אחר/נוסף כרגע השאילתה מציגה לי פוסטים אחרונים שזה מצויין הבעיה שלי זה אם אחד הגולשים כתב 10 פוסטים בשעה האחרונה השאילתא תחזיר את עשרת הפוסטים שלו ואני רוצה שיוצג רק האחרון שלו + 9 של אחרים האם זה אפשרי ?
 

pitoach

New member
distinct מאפשר לך לבחור רק רשומה אחת עבור כל

משתמש הרעיון במקום לבצע JPOIN עם הטבלה המלאה לבצע סינון מוקדם ככל הניתן של הנתונים ובשלב שבו לוקחים את הנתון של המשתמש לראשונה ניתן לבצע את הסינון. אפשרות סינון אחת היא על ידי distinct אפשרות אחרת תהיה בעזרת TOP למשל או MAX כדי לבחור עבור כל משתמש את התגובה האחרונה שלו בלבד. * לצערי יכולת קריאת המחשבות שלי קצת חלשה לאחרונה
אני לא מצליח לראות בעיני רוחי את מבנה הטבלאות שלך כדי לראות את הפתרון המדוייק אשר יתאים לך, אז אולי אם תעזרי לנו ותספקי לנו את מה שחסר (שאילתה שתייצר לנו את הטבלאות כמו שיש לך) נוכל לעזור הרבה יותר אם את עובדת בשרת SQL את יכולה ליצור שאילתה בלחיצת כפתור עבור כל טבלה שקשורה לבעיה. ואז נוכל לבנות אצלנו את הטבלאות ולראות מה מתאים...
 

יפעתת

New member
DISTINCT זה לא הפתרון

תראה את זה ככה : נניח שיש לך 2 טבלאות :
tbl_blog blogid blogname tbl_post postid posttitle blogid​
אני רוצה להציג את 2 הפוסטים האחרונים מבלוגים שונים כלומר אם בטבלת הפוסטים שלי מופיע הנתונים הבאים 1 אבג 1 2 בגד 2 3 גדה 2 אני רוצה שהוא יציג לי רק את פוסט 3 ו - 1 שהם מבלוגים שונים יותר ברור?
 

flenger

New member
למה דווקא 1 ו 3 ?

הכי 2 גם מגיע מאותו POST למה שהוא לא יכלל גם ?
 

יפעתת

New member
בגלל שהוא מאותו בלוג של מספר 3

אני רוצה למנוע מצב שיש לי 2 פוסטים מאותו בלוג.
 

dror0548

New member
פתרון

Select * from ( Select postid,blogid, Row_Number() Over(Partition by tbl_post.blogid Order By tbl_post.postid desc) Mone_rn1 from tbl_post ) table1 Where table1.Mone_rn1 = 1
 
למעלה