Avatar billede sirvoks Nybegynder
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
Avatar billede Syska Mester
26. maj 2009 - 22:07 #1
SELECT DISTINCT TOP 20 BuildingID FROM BuildingLevels
Avatar billede sirvoks Nybegynder
27. maj 2009 - 13:39 #2
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 !?
Avatar billede Syska Mester
27. maj 2009 - 15:33 #3
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
Avatar billede sirvoks Nybegynder
27. maj 2009 - 16:31 #4
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. :)
Avatar billede Syska Mester
27. maj 2009 - 17:06 #5
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
Avatar billede sirvoks Nybegynder
27. maj 2009 - 17:33 #6
Det jeg vil er at jeg vil ende med x antal rows hvor ParentID er unikt
Avatar billede Syska Mester
27. maj 2009 - 18:22 #7
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
Avatar billede sirvoks Nybegynder
27. maj 2009 - 18:28 #8
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..
Avatar billede Syska Mester
27. maj 2009 - 22:53 #9
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
Avatar billede sirvoks Nybegynder
28. maj 2009 - 15:46 #10
AutoID er ThreadID - men det er IKKE nødvendigvis den tråd der er opdateret sidst! Derfor ORDER BY EditDate
Avatar billede Syska Mester
29. maj 2009 - 11:12 #11
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
Avatar billede sirvoks Nybegynder
11. juni 2009 - 16:14 #12
Hvordan vil du foreslå at det skal laves om hvis det skulle køre optimalt?
Avatar billede sirvoks Nybegynder
11. juni 2009 - 18:32 #13
Se her buzzzz/andre: http://www.eksperten.dk/spm/877901
Så er der flere point på højkant!
Avatar billede Syska Mester
12. juni 2009 - 00:41 #14
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester