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
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:
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
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?
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
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.