Meddelande

Minska
No announcement yet.

Trixig sortering...

Minska
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • Trixig sortering...

    Hallå!

    Jag har två tabeller, items och versions. När man skapar en ny item så skapar man även en version. Ibland finns det bara en version till en item och ibland har den flera. Oavsett antal versioner så vill jag alltid skriva ut en tabell med antalet rader som det finns items. Jag vill där lista rubriker i en kolumn och sedan alla versiontitlar i nästa kolumn. Såhär skulle det kunna se ut:

    Item title | Version title(s)
    ---------------------------
    Item 1 | Version 1, 2, 3
    Item 2 | Version 1
    Item 3 | Version 1, 2
    Item 4 | Version 1, 2, 3
    Item 5 | Version 1

    Bör jag köra selecten på items eller versions?
    Just nu kör jag på items (5 träffar i det här fallet) och sedan en ny sql-fråga varje gång jag kommer till version-kolumnen där alla versioner loopas ut.

    Jag kommer bara att ha max 100 items och max 10 versioner per item, men lägger man ihop det blir det en fråga för itemsen och 100 frågor för versionerna.

    Om jag i stället kör selecten på versions (10 träffar i det här fallet) så blir det bara en enda fråga, men det blir betydligt mer komplicerat med sortering. Jag gissar att jag med php får kolla om en ny version dyker upp och i så fall lägga till en versionrubrik i den kolumnen och om en ny item dyker upp skapa en ny tabellrad. Om det är rätt tänkt så tror jag att jag vet hur jag ska komma fram hit.

    Men därefter börjar eländet. Jag har nämligen betydligt fler fält än vad som nämnts ovan och vill kunna sortera på vart ett av dem, men då börjar mina versions att blandas upp huller om buller och jag kan inte längre köra en sådan php-check för när ny rad resp. ny version ska loopas ut. Det skulle kunna gå om jag kunde sortera på vilket fält som helst, men alla versioner alltid kom i en klump efter resp item-post i sorteringen.

    Skitsvårt att förklara. Makes any sense at all?
    Ska jag bara ta den enkla vägen och hämta versionstitlarna med nya frågor?
    bassebhu - din kompis bland kompisar

    Om du mot förmodan inte är nöjd med kompositionen av ovanstående inlägg,
    eller att det helt enkelt inte nådde upp till dina förväntningtar - var god:

    Rapportera till bassebhu

  • #2
    *nevermind*
    Last edited by Nate.A; 2014-08-22, 12:16. Anledning: tankevurpa...

    Kommentera


    • #3
      hehe ok. Jag har en fungerande lösning med loop i loop, men det känns inte optimalt

      Kan man hämta alla versioner i en fråga och sen dela upp det i två arrayer? En med items och en med versioner? då kan jag enkelt foreacha alla items och sen foreacha alla versioner. Fortfarande loop i loop, men i alla fall inte nya databasfrågor.
      bassebhu - din kompis bland kompisar

      Om du mot förmodan inte är nöjd med kompositionen av ovanstående inlägg,
      eller att det helt enkelt inte nådde upp till dina förväntningtar - var god:

      Rapportera till bassebhu

      Kommentera


      • #4
        Jag skulle skriva en SQL fråga som JOINade Items och Versioner och i princip plockade ut rader med följande innehåll: (Jag får gissa lite hur dina tabeller ser ut)

        I.ItemID, I.ItemName, V.VersionTitle (I hör till Item, V till Version)
        ... Order By I.SortOrder, V.VersionTitle ASC

        Då bör du få rader enligt exemplet ovan Enlligt:
        1, Item 1 , Version 1
        1, Item 1 , Version 2
        1, Item 1 , Version 3
        2, Item 2 , Version 1
        3, Item 3 , Version 1
        3, Item 3 , Version 2
        4, Item 4 , Version 1
        4, Item 4 , Version 2
        4, Item 4 , Version 3
        5, Item 5 , Version 1

        Sedan får du bygga EN for-loop i ditt skript som bygger upp det utseende du vill ha.
        Alltså ungefär (pseudokod):

        Kod:
        LastItemID = -1
        R = nästa rad i ResultatSetet
        While R finns
        Begin
           If R.ItemID <> LastItemID
           Begin
              If LastItemID <> -1
                 Lagra din gamla Str på något sätt
        
              Str = R.ItemName + ', ' + V.VersionName 
              LastItemID = R.ItemID
           End
           Else
           Begin
              Str = Str + ', ' + REPLACE(V.VersionName, 'Version ', '')  
           End
        
           R = nästa rad i ResultatSetet
        
        END

        Kommentera


        • #5
          Tackar! Ser bra ut. Ska testa!
          bassebhu - din kompis bland kompisar

          Om du mot förmodan inte är nöjd med kompositionen av ovanstående inlägg,
          eller att det helt enkelt inte nådde upp till dina förväntningtar - var god:

          Rapportera till bassebhu

          Kommentera

          Working...
          X