Hej! Skrivet ur huvudet, så det lär nog inte fungera... Men det borde gå att jobba vidare på, tror att principen ska fungera, men det är ju ingen garanti ;) Om det sedan är snabbare vet jag inte, men det borde det vara. Efter lite kontakt via iMail tror jag att detta fungerar:Hjälp med selectsats...
Har nu grubblat på detta väldigt läge.. testat fram och tillbaka.. och nu har jag gett
upp.. =(
Jag har en selectsats som funkar, men dock inte så snabb
Någon här som kanske kan hjälpa mig...
Jag ha en tabell till mitt forum som heter "Forum_Data"
Så här ser strukturen ut:
| ID | ForumID | TopicID | UserID | Topic | Text | Datum |
Ett huvudinlägg får ju automatiskt ett ID... och jag sätter TopicID = 0
Och alla svar lägger in huvudinläggets ID under TopicID... om ni förstår...
(Man kan inte svara på ett svar, så det är bara 2 nivåer)
Nu vill jag göra en selectsats som presenterar alla huvud inlägg i datum ordning...
det jag kör fast på är att om jag bara skriver "SELECT * FROM Forum_Data ORDER BY Datum DESC"
så kan det ju komma många svar från samma huvudinlägg efter varann...
Jag har testat:
"SELECT TopicID, Max(Datum) AS LastDatum FROM Forum_Data FD WHERE ForumID = 6 GROUP BY TopicID ORDER BY LastDatum DESC"
Men då grupperas alla huvudinlägg som har TopicID = 0 med varann...
denna select funkar:
"SELECT TOP 100 FD1.*,
IsNull((SELECT MAX(Datum) FROM Forum_Data FD2 WHERE FD2.TopicID = FD1.ID), FD1.Datum) AS SenasteInlagget,
IsNull((SELECT TOP 1 UserID FROM Forum_Data FD2 WHERE FD2.TopicID = FD1.ID ORDER BY Datum DESC), FD1.UserID) AS LastUserID
FROM Forum_Data FD1 WHERE FD1.TopicID = 0 AND FD1.ForumID = 1
ORDER BY SenasteInlagget DESC"
Jag vet att denna selectsats är seg på grund av att den gör 2 nya select för varje rad..
och dessutom sorterar... därför har jag TOP 100... men det måste gå att fixa på något
bättre sätt...
Jätte tacksam för hjälp.... ;)
Mvh
Johan.NETSv: Hjälp med selectsats...
SELECT TOP 100 FD1.ID, FD1.TopicID, FD1.Topic, FD1.[Text], FD1.UserID, IsNull(FD3.UserID, FD1.UserID) AS LastUserID, IsNull(FD3.Datum, FD1.Datum) AS SenasteInlagget
FROM Forum_Data FD1 LEFT JOIN Forum_Data FD2 ON FD1.ID = FD2.TopicID LEFT JOIN Forum_Data FD3 ON FD1.ID = FD3.TopicID AND FD3.Datum = MAX(FD2.Datum)
WHERE FD1.TopicID = 0 AND FD1.ForumID = 1
GROUP BY FD1.ID, FD1.TopicID, FD1.Topic, FD1.[Text], FD1.UserID, FD3.UserID, FD3.Datum, FD1.Datum
ORDER BY SenasteInlagget DESC
/JohanSv: Hjälp med selectsats...
SELECT
FD1.ID, FD1.ForumID, FD1.TopicID, FD1.UserID,
FD1.Topic,
FD1.Visat,
FD1.Häftad,
FD1.HäftadTxt,
FD1.Bevakas,
Count(FD2.ID) AS AntalSvar,
IsNull(FD3.UserID, FD1.UserID) AS LastUserID,
IsNull(FD3.Datum, FD1.Datum) AS SenasteInlagget
FROM
Forum_Data FD1 LEFT JOIN Forum_Data FD2 ON FD1.ID = FD2.TopicID LEFT JOIN Forum_Data FD3 ON FD1.ID = FD3.TopicID
WHERE FD1.TopicID = 0 AND FD1.ForumID = 1 AND FD1.Deleted = 0 AND IsNull(FD2.Deleted, FD1.Deleted) = 0 AND IsNull(FD3.Deleted, FD1.Deleted) = 0
GROUP BY FD1.ID, FD1.ForumID, FD1.TopicID, FD1.UserID, FD1.Topic, FD1.Visat, FD1.Häftad, FD1.HäftadTxt, FD1.Bevakas, FD3.UserID, FD3.Datum, FD1.Datum
HAVING IsNull(FD3.Datum, 0) = IsNull(MAX(FD2.Datum), 0)
ORDER BY FD1.Häftad DESC, SenasteInlagget DESC
/Johan