Jag håller på med ett forum och nu vill jag få fram datumet för den senaste posten i tråden. Det är till för forumöversikten. Nu har jag en fungerande kod som enbart tar fram trådarna och det senaste datumet. Dock får jag inte ihop den med den gamla koden, så här behöver jag hjälp. ForumReadPosts håller reda på vilka användare som har läst vilka poster. Nej den fungerade inte. Dels så fanns inte A.ForumID = 1 med så jag fick lov att klämma in det där jag trodde att den skulle vara, men efter det så visade den samma resultat som min gamla kod, fast osorterat. Jag la till ett extra fält där jag i huvudposten sparar det senaste datumet för tråden. Lite B men enkelt och fungerar som jag vill.Få fram datumet för senaste posten i tråden
Det som är intressant att veta är nog PostDate som innehåller postens datum, ParentID som är 0 om det är första posten i tråden, annars innehållar den första trådens ID.
Det är en MySQL-databas.
Koden:
<code>"SELECT A.ID, A.Subject, A.PostDate, B.Nick, C.ID AS ReadID, Count(D.ID) AS AnswerCount FROM ForumPosts A, Users B LEFT JOIN ForumReadPosts C ON C.UserID = 1 AND C.PostID = A.ID LEFT JOIN ForumPosts D ON D.ParentID = A.ID WHERE B.ID = A.OwnerID AND A.ForumID = 1 AND A.ParentID = 0 GROUP BY A.ID ORDER BY A.PostDate DESC"</code>
ThomasSv: Få fram datumet för senaste posten i tråden
Gammal kod:<code>"SELECT A.ID, A.Subject, A.PostDate, B.Nick, C.ID AS ReadID, Count(D.ID) AS AnswerCount FROM ForumPosts A, Users B LEFT JOIN ForumReadPosts C ON C.UserID = 1 AND C.PostID = A.ID LEFT JOIN ForumPosts D ON D.ParentID = A.ID WHERE B.ID = A.OwnerID AND A.ForumID = 1 AND A.ParentID = 0 GROUP BY A.ID ORDER BY A.PostDate DESC"</code>
Ny kod:<code>SELECT A.Subject, MAX(B.PostDate) FROM ForumPosts A, ForumPosts B WHERE (A.ParentId=0 AND A.ID = B.ParentID) OR (B.ParentID = 0 AND A.ID = B.ID ) GROUP BY A.Subject</code>
Det ska väl inte vara så svårt? ;)
ThomasSv:Få fram datumet för senaste posten i tråden
SELECT A.ID, A.Subject, A.PostDate, C.Nick, MAX(B.PostDate), D.ID AS ReadID, Count(B.ID) AS AnswerCount FROM ((ForumPosts A, ForumPosts B) LEFT JOIN Users C ON A.OwnerID = C.ID) LEFT JOIN ForumReadPosts D ON D.UserID = 1 AND D.PostID = A.ID WHERE (A.ParentId=0 AND A.ID = B.ParentID) OR (B.ParentID = 0 AND A.ID = B.ID ) GROUP BY A.ID, A.Subject, A.PostDate, C.Nick
Nu har jag bara klippt och klistrat lite, så oddsen att det blev rätt är ganska små :) Jag är inte helt med på vad ForumReadPosts gör, så det kanske är lite fel där...
/Johan
Sv: Få fram datumet för senaste posten i tråden
Jag har inte möjlighet att testa koden nu, men ska göra det så fort jag kan.
Återkommer med resultat.
ThomasSv: Få fram datumet för senaste posten i tråden
Edit: Exakt samma resultat var det visst inte heller, men hur som helst så var det inte rätt.
ThomasSv: Få fram datumet för senaste posten i tråden
Thomas