Roger: /MySQL wert aus mehreren spalten subtrahieren

moin!

ich steck mal wieder fest und brauch eure hilfe.
ich habe eine tabelle mit mehreren spalten:

id | wert1 | wert2 | wert3 | wert4 | wert5 |

jedes dieser felder enthält dezimalzahlen (ausser id), bsp.:
1  |  5.55 |  0.00 |  2.45 |  8.00 |  0.00 |

insgesamt ergibt die zeile eine summe von 16.00. jetzt soll aus dieser zeile der wert x (< summe der zeile; ist aber vorgeschrieben/gegeben), nehmen wir mal an 10.00, entnommen werden. dabei ist es unwichtig, welche spalte gemindert wird. schön wäre es nat., wenn man absteigend subtrahieren könnte (von wert5 bis wert1). aber ich will nicht zuviel verlangen.
ich hab mich da wieder in den wald verannt und sehe keine bäume (oder so ähnlich). könnt ihr mir weiter helfen?

gruß.
roger.

--
Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
  1. Hi,

    ich hab mich da wieder in den wald verannt und sehe keine bäume (oder so ähnlich). könnt ihr mir weiter helfen?

    der Baum hat das Aussehen eines Jesus-Kreuzes, nur ohne Jesus und unten etwas gekürzt. Der Fachmann spricht vom sogenannten "Pluszeichen". Damit kann man addieren, und das praktische ist, dass man diese Addition auch zur Bildung von Summen verwenden kann. Toll, nicht?

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. moin!

      ähm...? wie? was? hast du ne lösung oder war das jetzt nur wieder ne spitze?

      gruß.
      roger.

      --
      Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
      1. Hi,

        ähm...? wie? was? hast du ne lösung oder war das jetzt nur wieder ne spitze?

        das war der Hinweis, dass Du augenscheinlich um ein Vielfaches zu kompliziert denkst.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. moin!

          das war der Hinweis, dass Du augenscheinlich um ein Vielfaches zu kompliziert denkst.

          yo, genau deswegen bat ich ja um (für mich einfache) hilfe. ist wohl dann doch schon zeit fürs wochenende...

          gruß.
          roger.

          --
          Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
          1. Hi,

            yo, genau deswegen bat ich ja um (für mich einfache) hilfe. ist wohl dann doch schon zeit fürs wochenende...

            das vermute ich auch. Wo genau bist Du denn nicht weitergekommen? Beim Querbalken des Pluszeichens? ;-)

            Cheatah

            --
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. moin!

              das vermute ich auch. Wo genau bist Du denn nicht weitergekommen? Beim Querbalken des Pluszeichens? ;-)

              *grummel*
              eigentlich hab ich gar nix verstanden.
              ich wollte die db tabelle aktualisieren. und zwar mit den übrig gebliebenen werten. (vielleicht hab ich mich auch nur schlecht ausgedrückt)

              gruß.
              roger.

              --
              Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
              1. Hi,

                das vermute ich auch. Wo genau bist Du denn nicht weitergekommen? Beim Querbalken des Pluszeichens? ;-)
                eigentlich hab ich gar nix verstanden.

                Zeit für's Wochenende. Man sollte niemals Dinge tun - schon gar nicht einmalige - wenn man nicht vollständig versteht, was man da eigentlich macht.

                (vielleicht hab ich mich auch nur schlecht ausgedrückt)

                Nun ja, mir ist noch immer nicht ganz klar, wo Du eigentlich was her hast und unter welchen Bedingungen die Daten wie wo weiterverwendet werden sollen.

                Cheatah

                --
                X-Will-Answer-Email: No
                X-Please-Search-Archive-First: Absolutely Yes
  2. moin!

    ok, jetzt hab ich mich wieder etwas beruhigt, und versuche nochmal einen klaren gedanke zu fassen.
    die oben angegebenen werte sind werte aus einer datenbank. 6 spalten, um genau zu sein. die erste spalte ist nur die id, die anderen 5 spalten enthalten werte, dezimalwerte. die summe der spalten einer zeile könnte man auch als sogenanntes konto bezeichnen. die einzelnen spalten sind dann quasi die einkünfte aus verschiedenen tätigkeiten. jetzt soll vom gesamtkonto ein betrag abgehoben werden. in meinem beispiel war das die zahl 10.00.

    was ich jetzt möchte, ist, dass der betrag vom konto abgebucht wird. die problematik hierbei ist eben, die einzelnen bereiche/spalten zu beachten. keine spalte darf kleiner als null werden.
    ich hatte es so gelöst, dass ich zunächst von wert5 den maximalbetrag subtrahiert hatte, wenn dieser kleiner war als die "abzuhebende" summe, wurde dann mit wert4 fortgefahren, usw..
    das problem ist eben die ganze verschachtelungskacke, die da zustande kommt.

    vielleicht habe ich auch mit meiner lösung falsch angefangen...

    gruß.
    roger.

    --
    Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
    1. Hello,

      es gibt auch in MySQL Variablen und eine if-Funktion. Ich habe die Variablen aber noch nie benutzt.

      http://www.mysql.de/doc/de/Variables.html

      Vielleicht kann man 'was damit anfangen.

      Sonst hilft eben nur
      WriteLock
      Lesen des Satzes
      Updatewerte bestimmen
      Update durchführen
      Lock freigeben

      Das wären dann aber mindestens vier Statements.
      Oder man arbeitet mit optimistic Logik:

      mit Select die aktuellen Werte besorgen
      Update durchführen mit where-Klausel, in der die aktuellen Werte nochmals bestätigt werden müssen.
      Dann kann man ja anschließend die Affected Rows lesen. Wenn die nicht ==1 sind, ist es leider scheifgegangen und jemand anders hat zwischen Select und Update gefummelt an dem Satz.

      Alternativ kann man auch einen Conflict-Counter einführen. Der wird bei jedem Schreibvorgang hochgesetzt, steht aber auch mit dem letzten Wert im where-Filter. Leider hat MySQL keinen automatischen Conflict-Counter. Und Timestamp ist zu gefährlich, da 1s eine verflixt lange Zeit ist für eine Datenbank.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      1. moin!

        danke, dass du dich meinem thread angenommen hast. aber ich glaube, dass du schon zu weit gedacht hast: ich will nur aus einer zeile einen wert subtrahieren.

        gruß.
        roger.

        --
        Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de