SQL - Kleinsten Wert ermitteln und update in spalte

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Das hier wäre vielleicht eine Möglichkeit
    Code:
    UPDATE
      test T0
    
      SET T0.d = IF(IF(T0.c < T0.b, T0.c, T0.b) > T0.`a`, T0.`a`,IF(T0.c < T0.b, T0.c, T0.b)), --kleinste Zahl
            T0.e = IF(IF(T0.c < T0.b, 'c', 'b') > T0.`a`, 'a' ,IF(T0.c < T0.b, 'c', 'b'))           --Feldname mit kleinster Zahl
    Wobei es sicherlich einfacher wäre die Daten auf mehrere Tabellen zu verteilen.

    Gruß

    Kommentar


    • #17
      @Sady82
      teste mal damit:
      Code:
      select IF(null < 1, 'null kleiner eins', 'null ist nicht kleiner eins');
      select IF(null >1, 'null groesser eins', 'null ist nicht groeser eins');
      select null < 1 or null>1 or null=0;
      select 2*2, 2*2+null;
      und wenn das nicht so funktioniert, wie du es dir vorgestellt hast, dann lese noch mal was die Andere geschrieben haben.

      mfg
      Slava
      bituniverse.com

      Kommentar


      • #18
        Dafür gibts auch eine Lösung:

        Code:
        UPDATE
          test T0
        
          SET T0.d = IF(
                          IF( IFNULL(T0.c,0) < IFNULL(T0.b,0),
                            IFNULL(T0.c,0), IFNULL(T0.b,0)
                          ) 
                              > IFNULL(T0.`a`,0),
                              IFNULL(T0.`a`,0), IF(
                                                    IFNULL(T0.c,0) < IFNULL(T0.b,0),
                                                    IFNULL(T0.c,0), IFNULL(T0.b,0)
                                                  )
                       ),
              T0.e = IF(IF(IFNULL(T0.c,0) < IFNULL(T0.b,0), 'c', 'b') > IFNULL(T0.`a`,0), 'a' ,IF(IFNULL(T0.c,0) < IFNULL(T0.b,0), 'c', 'b'))
        Das wäre allerdings auch nur ein Workaround. Wenn man weiß, dass man mit Werten in der Datenbank mathematische Operationen durchführen will, muss man das Design auch entsprechend festlegen.

        Z.B:
        Code:
        CREATE TABLE `test` (
          `a` int(11) NOT NULL default '0',
          `b` int(11) NOT NULL default '0',
          `c` int(11) NOT NULL default '0',
          `d` int(11) NOT NULL default '0',
          `e` varchar(10) NOT NULL
        ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
        Gruß

        Kommentar


        • #19
          obere teil würde funktionieren, die untere nicht
          Code:
          T0.e = IF([B]IF(IFNULL(T0.c,0) < IFNULL(T0.b,0), 'c', 'b') > IFNULL(T0.`a`,0)[/B], 'a' ,IF(IFNULL(T0.c,0) < IFNULL(T0.b,0), 'c', 'b'))
          weil du buchstabe mit dem zahl vergleichst.
          solche fehler kommen immer wieder, wenn code unübersichtlich ist
          Slava
          bituniverse.com

          Kommentar


          • #20
            Richtig! Deshalb deshalb ist die beste Lösung immer die einfachste: Die Feldtypen in der DB richtig deklarieren

            Kommentar

            Lädt...
            X