Announcement

Collapse
No announcement yet.

Wie kann ich in einer Abfrage Daten definiert sortieren?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie kann ich in einer Abfrage Daten definiert sortieren?

    Hallo zusammen,

    ich stehe vor einer kleinen Herausforderung. In einer MySQL Tabelle stehen Artikeldaten mit den Werten Inhalt und die Einheit, so z.B.

    PHP Code:
    inhalt     |    Einheit
    ----------------------
    10         |   Liter
    2          
    |   kg
    5          
    |   Liter
    20         
    |   kg
    200        
    |   ml
    100        
    |   ml 
    Um die Werte benutzerfreundlich anzuzeigen, möchte ich sie gerne aufsteigend nach Inhalt sortieren. Das Problem ist hier, das die Inhalte
    in unterschiedlichen Mengeneinheiten vorliegen. Richtig sortiert müsste das Ergebnis so aussehen:

    PHP Code:
    inhalt     |    Einheit
    ----------------------
    100        |   ml  
    200        
    |   ml
    2          
    |   kg
    5          
    |   Liter
    10         
    |   Liter
    20         
    |   kg 
    Kann man die ml Angabe in Liter innerhalb der Abfrage umrechnen um zu sortieren?
    Wie kann ich das machen? Funktioniert das gleich in der SQL-Abfrage?

    Gruß René

  • #2
    Wie willst du kg in Liter umrechnen?
    Liter = Volumen
    kg = Gewicht
    Ansonsten select ....,berechnung as berechnungsFeld
    Christian

    Comment


    • #3
      Hallo Christian,

      die Idee war ml in Liter umzurechen. Das lässt sich dann leichter sortieren. Bei Gewichtsangaben gibt es nur kg da muss man dann nicht umrechnen.
      Wie mache ich das Select? Jetzt sieht es so aus:

      PHP Code:
      SELECT 
          a
      .artikel_inhalt
          
      artikel_inhalt_einh
      FROM 
          dbo_artikel a 
          INNER JOIN dbo_artikel_titel b ON a
      .artikel_nr b.artikel_nr 
          
      AND NOT (a.artikel_inhalt ''
          and 
      a.wagr_id3 '9102050' 
      group by 
          a
      .artikel_inhalt 
      Gruß René

      Comment


      • #4
        SELECT
        a
        .artikel_inhalt,
        artikel_inhalt_einh,
        (hier deine Berechnung) as berechnungsFeld
        FROM


        Christian

        Comment


        • #5
          Also die Milliliter würde ich in Liter umrechnen und die Einheit auch. Cool oder?

          Da es offenbar nur um den Fall Milliliter geht, muss das dann bedingt durchgeführt werden.
          Code:
          Case when einheit='ml' then concat(einheit, '/1000 (Liter)' else einheit end as NeueEinheit,
          Case when einheit='ml' then wert/1000 else wert end as NeuerWert
          Gruß, defo

          Comment


          • #6
            Hallo zusammen,

            danke für Eure Hilfe. Finale Lösung:
            PHP Code:
            SELECT 
                a
            .artikel_inhalt
                
            artikel_inhalt_einh,
                Case 
            when artikel_inhalt_einh 'ml' then a.artikel_inhalt 1000 else a.artikel_inhalt end as inhalt
            FROM 
                dbo_artikel a 
                INNER JOIN dbo_artikel_titel b ON a
            .artikel_nr b.artikel_nr 
                
            AND NOT (a.artikel_inhalt ''
                and 
            a.wagr_id3 '9102050' 
            group by 
                a
            .artikel_inhalt
            order by
                inhalt 
            Gruß René

            Comment


            • #7
              Originally posted by Nevada208 View Post
              danke für Eure Hilfe. Finale Lösung...
              Das soll jetzt final sein?!
              Was ist mit der Einheit? Du wolltest doch eine benutzerfreundliche Darstellung!
              Jetzt steht dort statt 100 ml dann 0,1 ml?!
              Gruß, defo

              Comment


              • #8
                Also um das von Dir gewünschte Ergebnis zu erhalten, bedarf es keinem Join.
                So wie Christian Marquardt es bereits in #4 angedeutet hat, reicht eine einfache CASE Fallunterscheidung.
                Ich würde allerdings, um mit Integern rechnen zu können, die Umrechnung von Liter in ml vorziehen:
                [highlight=sql]
                SELECT
                inhalt,
                einheit,
                case
                when einheit in ( 'Liter', 'kg' ) then inhalt * 1000
                else inhalt
                end as sortableInhalt

                FROM
                `mengen`

                ORDER BY
                sortableInhalt
                [/highlight]
                Ich mal kg auch in g umrechnen lassen, weil ich nicht weiß, ob das evtl. auch bei Dir mal vorkommt.
                Die Ausgabe ist jedenfalls das, was Du in #1 haben wolltest.
                PHP rocks!
                Eine Initiative der PHP Community

                Comment


                • #9
                  Hallo defo,

                  das passt schon so. Inhalt brauch ich nur zum sortieren, ausgegeben werden die Werte:

                  a.artikel_inhalt => als Inhalt so wie er ursprüglich eingegeben wurde
                  artikel_inhalt_einh => als Einhelt wie ursprünglich eingegeben Liter oder kg

                  Gruß

                  Comment

                  Working...
                  X