|  | 		    
					
        
         
          
         
	
          | |  | [mysql] order by Fra : Martin
 | 
 Dato :  05-10-09 16:04
 | 
 |  | Hej..
 
 Jeg har nogle ID'er som skal sorteres lidt specielt
 
 SELECT * FROM tx_extendedshop_products WHERE pid IN
 (1652,1653,1654,1656,1657,1660,1285,1661,1664,1665,1667,1669)
 
 De skal sorteres som der står i den liste
 altså
 1652, 1653 osv.
 
 Fyrer jeg ingen ORDER BY på, så kommer 1285 først
 
 Fyrer jeg
 ORDER BY pid IN
 (1652,1653,1654,1656,1657,1660,1285,1661,1664,1665,1667,1669)
 
 Så kommer 1285 også først, så hvordan skal man sorterer disse?
 
 PS
 PID er IKKE primær nøgle, og har ikke autoincrement på, hvis det skulle
 have nogen betydning :)
 
 
 |  |  | 
  Martin (05-10-2009) 
 
	
          | |  | Kommentar Fra : Martin
 | 
 Dato :  05-10-09 16:08
 | 
 |  | Martin wrote:
 > Hej..
 >
 > Jeg har nogle ID'er som skal sorteres lidt specielt
 >
 > SELECT * FROM tx_extendedshop_products WHERE pid IN
 > (1652,1653,1654,1656,1657,1660,1285,1661,1664,1665,1667,1669)
 >
 > De skal sorteres som der står i den liste
 > altså
 > 1652, 1653 osv.
 >
 > Fyrer jeg ingen ORDER BY på, så kommer 1285 først
 >
 > Fyrer jeg
 > ORDER BY pid IN
 > (1652,1653,1654,1656,1657,1660,1285,1661,1664,1665,1667,1669)
 >
 > Så kommer 1285 også først, så hvordan skal man sorterer disse?
 >
 > PS
 > PID er IKKE primær nøgle, og har ikke autoincrement på, hvis det skulle
 > have nogen betydning :)
 
 ORDER BY pid =1652, pid =1653, pid=1654, pid=1656, pid=1657, pid=1660,
 pid=1285, pid=1661, pid=1664, pid=1665, pid=1667, pid=1669
 
 Virker, men findes der er en nemmere løsning?
 Jeg kan selvfølgelig sagtens programmerer mig ud af dette...
 
 
 |  |  | 
  Arne Vajhøj (06-10-2009) 
 
	
          | |  | Kommentar Fra : Arne Vajhøj
 | 
 Dato :  06-10-09 00:12
 | 
 |  | Martin wrote:
 > Jeg har nogle ID'er som skal sorteres lidt specielt
 >
 > SELECT * FROM tx_extendedshop_products WHERE pid IN
 > (1652,1653,1654,1656,1657,1660,1285,1661,1664,1665,1667,1669)
 >
 > De skal sorteres som der står i den liste
 > altså
 > 1652, 1653 osv.
 >
 > Fyrer jeg ingen ORDER BY på, så kommer 1285 først
 >
 > Fyrer jeg
 > ORDER BY pid IN
 > (1652,1653,1654,1656,1657,1660,1285,1661,1664,1665,1667,1669)
 >
 > Så kommer 1285 også først, så hvordan skal man sorterer disse?
 
 Hvad med at lave en lille sorterings tabel, så du kan lave:
 
 SELECT *
 FROM tx_extendedshop_products, sort_order
 WHERE tx_extendedshop_products.pid=sort_order.pid
 AND tx_extendedshop_products.pid IN
 (1652,1653,1654,1656,1657,1660,1285,1661,1664,1665,1667,1669)
 ORDER BY sort_order.sort_value
 
 ?
 
 Arne
 
 
 
 |  |  | 
  Lars Kongshøj (06-10-2009) 
 
	
          | |  | Kommentar Fra : Lars Kongshøj
 | 
 Dato :  06-10-09 07:29
 | 
 |  | 
 
            Martin skrev:
 > Hej..
 > 
 > Jeg har nogle ID'er som skal sorteres lidt specielt
 > 
 > SELECT * FROM tx_extendedshop_products WHERE pid IN 
 > (1652,1653,1654,1656,1657,1660,1285,1661,1664,1665,1667,1669)
 > 
 > De skal sorteres som der står i den liste
 > altså
 > 1652, 1653 osv.
 > 
 > Fyrer jeg ingen ORDER BY på, så kommer 1285 først
 > 
 > Fyrer jeg
 > ORDER BY pid IN 
 > (1652,1653,1654,1656,1657,1660,1285,1661,1664,1665,1667,1669)
 > 
 > Så kommer 1285 også først, så hvordan skal man sorterer disse?
 > 
 > PS
 > PID er IKKE primær nøgle, og har ikke autoincrement på, hvis det skulle 
 > have nogen betydning :)
 Du har designet din database forkert, eller vælger i bedste fald at 
 skrive din query på en forkert måde.
 Jeg går ud fra at du ikke ønsker at sortere på id-erne, men på _din_ 
 viden om, hvad der ligger af information knyttet til den enkelte id.
 Den viden bør også ligge et sted i databasen, og du bør så vælge det/de 
 felter, der indeholder informationen til at sortere efter.
 Desuden er det i lodret modstrid med god programmeringsskik at hardcode 
 id'er og lignede ind i sine programmer. Vil du skrive dine programmer om 
 hver gang, der forsvinder to id'er og kommer fem nye til? Eller når 
 detaljeinformationen for tre af id'erne ændrer sig, så sorteringen skal 
 ændres?
 -- 
 Lars Kongshøj
http://www.kongshoj.com/ |  |  | 
  Stig Johansen (06-10-2009) 
 
	
          | |  | Kommentar Fra : Stig Johansen
 | 
 Dato :  06-10-09 09:44
 | 
 |  | Lars Kongshøj wrote:
 
 > Du har designet din database forkert, eller vælger i bedste fald at
 > skrive din query på en forkert måde.
 
 Enig.
 
 > Jeg går ud fra at du ikke ønsker at sortere på id-erne, men på _din_
 > viden om, hvad der ligger af information knyttet til den enkelte id.
 > Den viden bør også ligge et sted i databasen, og du bør så vælge det/de
 > felter, der indeholder informationen til at sortere efter.
 
 Også enig.
 Hvis han ønsker en given sorteringsrække, så kan man altrnativt bruge:
 SELECT <min.ting>,<noget> FROM <noget> WHERE <noget> = <noget>
 UNION ALL
 SELECT <min.ting + 1>,<noget> FROM <noget> WHERE <noget> = <noget>
 osv.
 
 > Desuden er det i lodret modstrid med god programmeringsskik at hardcode
 > id'er og lignede ind i sine programmer.
 
 Ja, men sådan må det vel være....
 
 --
 Med venlig hilsen
 Stig Johansen
 
 
 |  |  | 
   Martin (06-10-2009) 
 
	
          | |  | Kommentar Fra : Martin
 | 
 Dato :  06-10-09 11:26
 | 
 |  | Stig Johansen wrote:
 > Lars Kongshøj wrote:
 >
 >> Du har designet din database forkert, eller vælger i bedste fald at
 >> skrive din query på en forkert måde.
 >
 > Enig.
 >
 >> Jeg går ud fra at du ikke ønsker at sortere på id-erne, men på _din_
 >> viden om, hvad der ligger af information knyttet til den enkelte id.
 >> Den viden bør også ligge et sted i databasen, og du bør så vælge det/de
 >> felter, der indeholder informationen til at sortere efter.
 
 Bare rolig, id's kommer fra et sted hvor man vælger hvilke produkter der
 skal vises på netop denne side. - Så nej jeg skal ikke skrive queryen om
 på noget tidspunkt.
 
 Men jeg er HELT enig om at hvis jeg skulle designe databasen, så ville
 jeg også gøre det helt anderledes.
 
 Der er allerede 2 forskellige måder at sorterer produkter på, der er
 produktnummer og et sorteringsfelt.
 
 Problemet er at kunden gerne ville kunne sorterer produkterne
 forskelligt fra side til side, og alle produkter bliver oprettet 1 sted
 - men bliver valgt et 3. sted, og lige netop det 3. sted findes der
 ingen måder at sorterer på, andet end at finde ud af hvilke produkter
 der kommer først i listen over ID'er
 
 Man skal nok kende lidt til det CMS der bliver brugt Typo3, for at helt
 kunne forstå det. :)
 
 >
 > Også enig.
 > Hvis han ønsker en given sorteringsrække, så kan man altrnativt bruge:
 > SELECT <min.ting>,<noget> FROM <noget> WHERE <noget> = <noget>
 > UNION ALL
 > SELECT <min.ting + 1>,<noget> FROM <noget> WHERE <noget> = <noget>
 > osv.
 >
 >> Desuden er det i lodret modstrid med god programmeringsskik at hardcode
 >> id'er og lignede ind i sine programmer.
 >
 > Ja, men sådan må det vel være....
 >
 
 
 |  |  | 
    Gert Krabsen (06-10-2009) 
 
	
          | |  | Kommentar Fra : Gert Krabsen
 | 
 Dato :  06-10-09 11:40
 | 
 |  | Martin skrev:
 > Stig Johansen wrote:
 >> Lars Kongshøj wrote:
 >>
 >>> Du har designet din database forkert, eller vælger i bedste fald at
 >>> skrive din query på en forkert måde.
 >> Enig.
 >>
 >>> Jeg går ud fra at du ikke ønsker at sortere på id-erne, men på _din_
 >>> viden om, hvad der ligger af information knyttet til den enkelte id.
 >>> Den viden bør også ligge et sted i databasen, og du bør så vælge det/de
 >>> felter, der indeholder informationen til at sortere efter.
 >
 > Bare rolig, id's kommer fra et sted hvor man vælger hvilke produkter der
 > skal vises på netop denne side. - Så nej jeg skal ikke skrive queryen om
 > på noget tidspunkt.
 >
 > Men jeg er HELT enig om at hvis jeg skulle designe databasen, så ville
 > jeg også gøre det helt anderledes.
 >
 > Der er allerede 2 forskellige måder at sorterer produkter på, der er
 > produktnummer og et sorteringsfelt.
 >
 > Problemet er at kunden gerne ville kunne sorterer produkterne
 > forskelligt fra side til side,
 
 Så må du oprette flere sorteringsfelter, så der er et til hvert behov..
 
 Eller fortælle kunden, at han ikke kan sortere efter et
 ikke-eksisterende kriterie..
 
 Alt andet ender med at blive noget klamphuggeri ;-(
 
 
 
 |  |  | 
     Martin (06-10-2009) 
 
	
          | |  | Kommentar Fra : Martin
 | 
 Dato :  06-10-09 11:38
 | 
 |  | Gert Krabsen wrote:
 > Martin skrev:
 >> Stig Johansen wrote:
 >>> Lars Kongshøj wrote:
 >>>
 >>>> Du har designet din database forkert, eller vælger i bedste fald at
 >>>> skrive din query på en forkert måde.
 >>> Enig.
 >>>
 >>>> Jeg går ud fra at du ikke ønsker at sortere på id-erne, men på _din_
 >>>> viden om, hvad der ligger af information knyttet til den enkelte id.
 >>>> Den viden bør også ligge et sted i databasen, og du bør så vælge det/de
 >>>> felter, der indeholder informationen til at sortere efter.
 >>
 >> Bare rolig, id's kommer fra et sted hvor man vælger hvilke produkter der
 >> skal vises på netop denne side. - Så nej jeg skal ikke skrive queryen om
 >> på noget tidspunkt.
 >>
 >> Men jeg er HELT enig om at hvis jeg skulle designe databasen, så ville
 >> jeg også gøre det helt anderledes.
 >>
 >> Der er allerede 2 forskellige måder at sorterer produkter på, der er
 >> produktnummer og et sorteringsfelt.
 >>
 >> Problemet er at kunden gerne ville kunne sorterer produkterne
 >> forskelligt fra side til side,
 >
 > Så må du oprette flere sorteringsfelter, så der er et til hvert behov..
 
 Enig, jeg ville også oprette en ny tabel ala
 produkt_id, side_id og sortering
 
 Problemet er så bare at det hele er en kæmpe extension så lige at få
 indarbejdet dette, ville nok tage en helt del længere tid, end de 6
 ekstra linjers kode jeg nu har skrevet for at få det til at virke perfekt.
 
 > Eller fortælle kunden, at han ikke kan sortere efter et
 > ikke-eksisterende kriterie..
 >
 > Alt andet ender med at blive noget klamphuggeri ;-(
 
 Nu er kunden rigtig glad, og kan se det virker helt perfekt, så at sige
 nu "at det kan man ikke" ville nok være lidt dumt hehe...
 
 
 |  |  | 
 |  |