Avatar billede sirvoks Nybegynder
19. maj 2009 - 01:08 Der er 12 kommentarer og
1 løsning

SELECT DISTINCT på VARCHAR ?

Hej

Hvordan vælger jeg et distinct tekstfelt på en varchar?
Skal bruge unikke GroupName's

SELECT DISTINCT [GroupName]
            ,[ForumID]
        ,[Name]
        ,[Description]
        ,[Accesslevel]
        ,[Offtopic]
        ,[Weblog]
FROM         Forum
WHERE        Forum.AccessLevel <= ".$AccessLevel."
        ORDER BY     GroupName, Name");

Den kode der laver selfølgelig en fejl.. men hvordan kommer jeg uden om det?
Avatar billede arne_v Ekspert
19. maj 2009 - 03:59 #1
Hvis der er mere end en række med det samme GroupName - hvordan skal værdier fra de andre rækker så udvælges ?
Avatar billede 4v3nger Nybegynder
19. maj 2009 - 07:47 #2
brug GROUP BY i stedet for DISTINCT?

SELECT a,b,c FROM xyz WHERE d='e' GROUP BY a ORDER BY a,b
Avatar billede 2c Nybegynder
19. maj 2009 - 08:36 #3
Virker dette ikke?
SELECT DISTINCT [GroupName] FROM Forum
WHERE Forum.AccessLevel <= ".$AccessLevel."
        ORDER BY    GroupName
Avatar billede sirvoks Nybegynder
19. maj 2009 - 11:39 #4
Det jeg forsøger er at få en funktion til at sende kategorierne tilbage sat pænt sammen. Hvis jeg fjerner distinct laver den bokse med samtlige GroupName's der har det rigtige indhold.. der er bare for mange af dem.

Så hvordan får jeg 'samlet' dem, så der kun kommer 1 boks pr. groupname ?

Lige nu kører det ved at den query der bliver returneret bliver kørt gennem et mssql_fetch_array og spyttet ud..
Avatar billede 4v3nger Nybegynder
19. maj 2009 - 11:55 #5
prøv group by...
Avatar billede sirvoks Nybegynder
19. maj 2009 - 12:17 #6
#5:

Warning: mssql_query() [function.mssql-query]: message: Column 'Forum.ForumID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. (severity 16) in C:\Inetpub\wwwroot\php.akvariefisk.dk\elements\classes\forum.php on line 45


    function getKategorier($AccessLevel)   
    {
        return mssql_query("
        SELECT [ForumID]
        ,[Name]
        ,[Description]
        ,[Accesslevel]
        ,[Offtopic]
        ,[Weblog]
        FROM         Forum
        WHERE        Forum.AccessLevel <= ".$AccessLevel."
        GROUP BY [GroupName]
        ORDER BY     GroupName, Name");
    }
Avatar billede 2c Nybegynder
19. maj 2009 - 12:55 #7
Virker dette ikke:

function getKategorier($AccessLevel)   
    {
        return mssql_query("
        SELECT GroupName FROM        Forum
        WHERE        Forum.AccessLevel <= ".$AccessLevel."
        GROUP BY [GroupName]
        ORDER BY    GroupName");
    }


Du skal jo ikke vælge de andre felter i din select liste.
Avatar billede 4v3nger Nybegynder
19. maj 2009 - 13:18 #8
du er tilbage til arnes kommentar igen... hvordan skal resten af værdierne vises...

du kan f.eks ikke få en unik forum_id, når det du beder mssql om, er at presse alle rækker med samme gruppenavn i én række...

hvis du kun skal bruge en liste af navne over grupper <= $AccesLevel skal du nøjes med GroupName i din select.
Avatar billede sirvoks Nybegynder
19. maj 2009 - 13:22 #9
Okay.. og hvordan kan jeg så få de individuelle værdier der har det samme groupname ??

Evt. med en SELECT hvor GroupName = CurrentGroupName ?
Avatar billede 4v3nger Nybegynder
19. maj 2009 - 13:28 #10
jep... :)
Avatar billede sirvoks Nybegynder
19. maj 2009 - 13:32 #11
Så er det løst.

    function getKategorier($AccessLevel)   
    {
        return mssql_query("
        SELECT [GroupName],min([AccessLevel])
        FROM         Forum
        WHERE        Forum.AccessLevel <= ".$AccessLevel."
        GROUP BY [GroupName]
        ORDER BY GroupName");
    }
   
    function getUnderKategorier($GroupName)
    {
        return mssql_query("
            SELECT [ForumID]
            ,[Name]
            ,[Description]
            ,[Accesslevel]
            ,[Offtopic]
            ,[Weblog]
            ,[GroupName]
            FROM Forum
            WHERE [GroupName] = '".$GroupName."'
            ORDER BY Name");
    }

Det virker nu. :)Smid lige nogle svar, så får i lidt point hver. :)
Avatar billede 2c Nybegynder
19. maj 2009 - 15:18 #12
Ok...
Avatar billede 4v3nger Nybegynder
19. maj 2009 - 15:26 #13
giv dem til arne... han mangler lidt... :D
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