Ankündigung

Einklappen
Keine Ankündigung bisher.

mysqli. Wert darf nicht unter 0 sein

Einklappen

Neue Werbung 2019

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

  • mysqli. Wert darf nicht unter 0 sein

    Ich suche eine kurze form für mein vorhaben.

    Um Coints kaufen zu können habe ich jetzt 3 Buttons mt 5,50,100 Coints. Klickt man ihn an werden die Coints mit UPDATE in der Datenbank angezogen.Das klappt auch.
    Wenn der kauf der ausgewählten Coints dann größer ist als die vorhandenen Coints auf der Datenbank steht dann Minus Coints in der Datenbank.

    Ich könnte ja jetzt erst mit SELECT abfragen wie viele Coints noch vorhanden sind und wenn die Zahl kleiner ist als der versuchte kauf blocke ich es einfach.

    Dafür wollte ich jetzt wissen ob es da ein query für gibt der das in einer abfrage kann,oder ob man in der Datenbank selbst da was einstellen kann.?
    Bei der Datenbank selbst muß man nur wissen das es ein laufendes System ist und nicht einfach nee neue Datenbank erstellen kann. Ich meine damit es wäre gut das man da was einstellen kann ohne Datenverlust oder so . Aber das wisst ihr ja besser wie man das an besten machen kann .
    Ich mach keine Rechtschreibfehler - ich schreib Freestyle!
    Erreichbar in mein Javascript-Forum und in Facebook-Chat

  • #2
    Was sind "Coints"?

    Warum lässt du in der Tabellenspalte überhaupt Negativwerte zu, wenn gar keine gespeichert werden dürfen?

    Kommentar


    • #3
      ... unsigned integer ...
      [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

      Kommentar


      • #4
        Zitat von hellbringer Beitrag anzeigen
        Was sind "Coints"?

        Warum lässt du in der Tabellenspalte überhaupt Negativwerte zu, wenn gar keine gespeichert werden dürfen?
        Genau das will ich ja nicht ,deswegen fragte ich ja wie man sowas machen kann weil ich da nicht weiter kam.


        Zitat von chorn Beitrag anzeigen
        ... unsigned integer ...
        Ja ,ich mußte erst Googel danach fragen aber dann habe ich es hinbekommen damit .Danke das habe ich gesucht aber nicht gefunden.
        Danke euch.

        Ich mach keine Rechtschreibfehler - ich schreib Freestyle!
        Erreichbar in mein Javascript-Forum und in Facebook-Chat

        Kommentar


        • #5
          Zitat von hellbringer Beitrag anzeigen
          Was sind "Coints"?
          Diese Frage bleibt wohl unbeantwortet, wie so vieles.


          Kommentar


          • #6
            Dann denk dir das T weg dann heißt es COINS . Auf die Idee kommt man nicht von alleine ?
            Der rest weiß dann Googel
            Ich mach keine Rechtschreibfehler - ich schreib Freestyle!
            Erreichbar in mein Javascript-Forum und in Facebook-Chat

            Kommentar


            • #7
              Zitat von basti1012 Beitrag anzeigen
              Dann denk dir das T weg dann heißt es COINS . Auf die Idee kommt man nicht von alleine ?
              Warum schreibst du es nicht gleich richtig? Es ist ja kein Tippfehler, sondern du hast es konsequent, also bewusst, so geschrieben.

              Kommentar


              • #8
                Man kann das in einem UPDATE statement verbauen mittels IF Abfragen,:
                Code:
                UPDATE konto SET coins = coins - IF(coins >= 50, 50, 0) WHERE ...
                In diesem Fall wird geprüft, ob der Kontostand noch über 50 ist und falls nicht, wird dem Konto 0 abgezogen.

                Die Zahl der geänderten Datensaätze sagt dir, ob etwas abgezogen wurde (1) oder nicht (0).
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar


                • #9
                  Ich könnte ja jetzt erst mit SELECT abfragen wie viele Coints noch vorhanden sind und wenn die Zahl kleiner ist als der versuchte kauf blocke ich es einfach.
                  Es spricht auch nichts dagegen es so zu machen. Zumal du keine teuren Schreiboperationen verschwendest.

                  Kommentar


                  • #10
                    Zitat von basti1012 Beitrag anzeigen
                    Ich könnte ja jetzt erst mit SELECT abfragen wie viele Coints noch vorhanden sind und wenn die Zahl kleiner ist als der versuchte kauf blocke ich es einfach.
                    Ich hatte nach was kürzeres gesucht ,so wie das hier
                    Zitat von lstegelitz Beitrag anzeigen
                    Man kann das in einem UPDATE statement verbauen mittels IF Abfragen,:
                    Code:
                    UPDATE konto SET coins = coins - IF(coins >= 50, 50, 0) WHERE ...
                    In diesem Fall wird geprüft, ob der Kontostand noch über 50 ist und falls nicht, wird dem Konto 0 abgezogen.
                    Die Zahl der geänderten Datensaätze sagt dir, ob etwas abgezogen wurde (1) oder nicht (0).
                    Ich meine sowas mal irgendwo gesehen zu haben konnte aber nix vergleichbares finden.Das man IF in den query auch schreiben darf wahr mir fremd. Aber jetzt weiß ich das auch.
                    Auch wenn ich nach dieser Lösung gesucht hatte habe ich es jetzt so gemacht

                    Zitat von chorn Beitrag anzeigen
                    ... unsigned integer ...
                    Ist glaube ich am einfachsten.


                    Zitat von hellbringer Beitrag anzeigen

                    Warum schreibst du es nicht gleich richtig? Es ist ja kein Tippfehler, sondern du hast es konsequent, also bewusst, so geschrieben.
                    Weil ich doof bin.Andere erklärung habe ich dafür auch nicht
                    Ich mach keine Rechtschreibfehler - ich schreib Freestyle!
                    Erreichbar in mein Javascript-Forum und in Facebook-Chat

                    Kommentar


                    • #11
                      Zitat von basti1012 Beitrag anzeigen
                      Ist glaube ich am einfachsten.
                      Dann musst du aber auch den Fehler abfangen, der dann zurück kommt
                      Code:
                      #1690 - BIGINT UNSIGNED value is out of range in '(`test`.`entries`.`sum` - 3)'
                      hier wurde versucht in einem unsigned integer Feld mit Wert 1 per update 3 abzuziehen.

                      Ich hatte nach was kürzeres gesucht ,so wie das hier
                      Kürzer ist nicht immer besser oder gar schneller. Das vorherige Prüfen ob der Wert vor dem UPDATE gross genug ist, ist für mich die weitaus bessere Variante.


                      Kommentar


                      • #12
                        Zitat von protestix Beitrag anzeigen
                        Das vorherige Prüfen ob der Wert vor dem UPDATE gross genug ist, ist für mich die weitaus bessere Variante.
                        Echt? Was ist mit vielen gleichzeitigen parallelen Zugriffen? (moderne) Datenbanken können viele Dinge mittels CONSTRAINTS abdecken, man sollte das nutzen.
                        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                        Kommentar


                        • #13
                          Zitat von akretschmer Beitrag anzeigen
                          Was ist mit vielen gleichzeitigen parallelen Zugriffen?
                          Dafür gibts optimistic oder pessimistic Locking.

                          Kommentar

                          Lädt...
                          X