Avatar billede ha9953 Nybegynder
16. marts 2005 - 20:34 Der er 5 kommentarer og
1 løsning

DISTINCT på en post i forespørgsel på 2 tabeller

Jeg har følgende tabeller:

menu
-------
menuid
placering
navn
beskrivelse
link
target
synlig
type
portalid


Indhold i menu:

menuid      navn                portalid   
----------- -------------------- -----------
32          Nyheder              28         
33          Seneste Nyt          28         
34          Nyheder              29         
35          Seneste Nyt          29         
37          xtramenu            28   



menupunkt
-------
punktid
placering
navn
beskrivelse
link
target
synlig
type
menuid
portalid


Indhold i menupunkt:

punktid    navn              menuid      portalid    link                                             
----------- ----------------- ----------- ----------- -------------
2          Nyheder          32          28          <NULL>                                           
3          Seneste Nyt      33          28          <NULL>                                           
4          Nyheder          34          29          <NULL>                                           
5          Seneste Nyt      35          29          <NULL>                                           
8          menu5            37          28          &pid=8                                           
9          punkttest        37          28          &pid=9 



Jeg vil nu gerne have alle poster fra tabel [menu] hvor portalid = 28. Derudover vil jeg for hver af disse poster have en post pr række fra tabel [menupunkt], hvor menupunkt.menuid = menu.menuid:


SELECT menu.menuid,menu.navn,punktid,menupunkt.link as menupunkt_link
FROM menu,menupunkt
WHERE menu.menuid = menupunkt.menuid
AND menu.portalid = 28
AND menupunkt.portalid = 28
AND menu.synlig = 1
AND menupunkt.synlig = 1
ORDER BY menu.placering, menupunkt.placering


Ovenstående sql-sætning giver følgende:



menuid      navn            punktid    menupunkt_link                                   
----------- ---------------- ----------- -------------------------
37          xtramenu        9          &pid=9                                           
37          xtramenu        8          &pid=8                                           
33          Seneste Nyt      3          <NULL>                                           
32          Nyheder          2          <NULL>   


Her er det så problemet opstår. Jeg får alle de poster fra menupunkt, der er tilknyttet menuid 37, vil kun have en for hver menuid. Resultatet skulle gerne være som følgende:


menuid      navn            punktid    menupunkt_link                                   
----------- ---------------- ----------- -------------------------
37          xtramenu        9          &pid=9                                           
33          Seneste Nyt      3          <NULL>                                           
32          Nyheder          2          <NULL>   



Jeg ved det er en distinct, men kan ikke få den placeret. Nogen hjælp?
Avatar billede lorentsnv Nybegynder
16. marts 2005 - 23:58 #1
Nedenstånde SQL giver det resultat du vil have, ihvertfald i det viste tilfælde. I den viste SQL vælger jeg det største punktid, i det tilfældet hvor to records har samme menuid og navn.  Du specificerer ikke hvordan du skal vælge blandt de to records der har menuid = 37 og navn = xtamenu.

SELECT menu.menuid,menu.navn,punktid,menupunkt.link as menupunkt_link
FROM menu, (
    select menupunkt.*
    from menupunkt,(
        select menuid, portalid, max(punktid) as punktid
        from menupunkt
        group by menuid, portalid) as menupunkt2
    where     menupunkt.menuid = menupunkt2.menuid
    and    menupunkt. portalid = menupunkt2.portalid
    and    menupunkt.punktid = menupunkt2.punktid
    ) as menupunkt
WHERE menu.menuid = menupunkt.menuid
AND menu.portalid = 28
AND menupunkt.portalid = 28
AND menu.synlig = 1
AND menupunkt.synlig = 1
ORDER BY menu.placering, menupunkt.placering
Avatar billede ha9953 Nybegynder
17. marts 2005 - 00:24 #2
i stedet for at vælge den største id skal den den først sortere resultaterne fra menupunkt efter placering og så vælge den første post til hver menuid
Avatar billede lorentsnv Nybegynder
17. marts 2005 - 00:29 #3
Hvad skal den sortere efter?
I MS Access kan du i en groub by bruge FIRST. Det kan du ikke på SQL Server, desværre. Men når du siger at den skal vølge den første, må du også have en holdning til hvad som er den første. Er det den laveste menupunkt.placering?
Avatar billede ha9953 Nybegynder
17. marts 2005 - 00:30 #4
ja - det er den laveste menupunkt.placering
Avatar billede lorentsnv Nybegynder
17. marts 2005 - 00:34 #5
Jeg tror du kan lave en min(placering) i stedet for max(punktid);

SELECT menu.menuid,menu.navn,punktid,menupunkt.link as menupunkt_link
FROM menu, (
    select menupunkt.*
    from menupunkt,(
        select menuid, portalid, min(placering) as punktid
        from menupunkt
        group by menuid, portalid) as menupunkt2
    where    menupunkt.menuid = menupunkt2.menuid
    and    menupunkt. portalid = menupunkt2.portalid
    and    menupunkt.placering = menupunkt2.placering
    ) as menupunkt
WHERE menu.menuid = menupunkt.menuid
AND menu.portalid = 28
AND menupunkt.portalid = 28
AND menu.synlig = 1
AND menupunkt.synlig = 1
ORDER BY menu.placering, menupunkt.placering
Avatar billede ha9953 Nybegynder
28. april 2005 - 17:53 #6
Sorry den lange svartid
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