26. maj 2009 - 21:41
Der er
14 kommentarer
DISTINCT og TOP i samme query?
Hej. Hvordan sætter man både DISTINCT og TOP i samme query? Jeg skal bruge DISTINCT [ParentID] og TOP $antal
Annonceindlæg fra HP
SELECT DISTINCT TOP 20 BuildingID FROM BuildingLevels
function getNewTopics($antal=1) { $query = mssql_query(" SELECT DISTINCT TOP ".$antal." ,[ThreadID] ,[IsParent] ,[LastID] ,[ThreadCount] ,[ViewCount] ,[ForumID] ,[UserID] ,[CreateDate1] ,[EditDate2] ,[Subject] ,[Content] ,[Visible] ,[Lock] ,[SiteID] ,[SystemMsg] ,[StaticUser] ,[StaticUserEmail] ,[ImportedThread] ,[CreateDate] ,[EditDate] FROM [akvariefisk].[dbo].[Forum_Thread]"); return $query; } Den vælger bare ikke unikke ParentID's !?
nope, Da DISTINCT kun vælger unikke rows ... og hvis hele din overstående row ikke er unik vil den vælge alle ... Det ser heller ikke sådan lige ud til at overstående er unik, da du selecter på rimelig mange columns. // ouT
Har du evt. et forslag til hvordan man kommer rundt om det? Det jeg gerne vil er at vælge de $antal tråde der sidst er skrevet i. Og de skal alle sammen have unikke ParentID's Jeg giver point hvis det løser mit problem. :)
well ... Jeg kender ik' helt opbygningen men ... Lader til at du joiner på samme table ... med LartID og Parent ID ... SELECT TOP 10 * FROM table1 t1 LEFT JOIN (SELECT MAX(ThreadID), ParentID FROM table1 GROUP BY ParentID) t2 ON t1.ThreadID = t2.ThreadID Håber du kan se menignen ... og jeg mener det burde virke, dog ik' testet. // ouT
Det jeg vil er at jeg vil ende med x antal rows hvor ParentID er unikt
ja, men hvad med resten ? er ThreadID seneste post og er det en unik key? og hvor er ParentID i din egen query? Har du prøvet mit forslag ? // ouT
Hvad mener du med det? :P EditDate er den seneste... ORDER BY EditDate Lige en SELECT "SELECT [ThreadID] ,[ParentID] ,[IsParent] ,[LastID] ,[ThreadCount] ,[ViewCount] ,[ForumID] ,[UserID] ,[CreateDate1] ,[EditDate2] ,[Subject] ,[Content] ,[Visible] ,[Lock] ,[SiteID] ,[SystemMsg] ,[StaticUser] ,[StaticUserEmail] ,[ImportedThread] ,[CreateDate] ,[EditDate]" Jeg kan ikke helt se hvordan jeg får dit LJoin til at virke..
hmmm ... Hvad er ThreadID så ? Jeg kan altså ikke gætte mig frem til dine nøgler ... men du må da have et løbende Auto ID ... som automatisk vil være det højeste ID og som så er det seneste ID, dvs seneste post
AutoID er ThreadID - men det er IKKE nødvendigvis den tråd der er opdateret sidst! Derfor ORDER BY EditDate
SELECT DISTINCT TOP 10 MAX(EditDate), ParentID FROM table1 Så burde du kun få 1 row per unik ParentID Men lader til at dit design ... ikke er helt optimalt i forhold til hvad du vil opnå ... specielt vis execution time stadig skal være lav ... // ouT
11. juni 2009 - 16:14
#12
Hvordan vil du foreslå at det skal laves om hvis det skulle køre optimalt?
12. juni 2009 - 00:41
#14
svar
Computerworld tilbyder specialiserede kurser i database-management