doppelte werte verhindern

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

  • doppelte werte verhindern

    Hallo zusammen!

    ich habe eine Tabelle tab1 in der ein feld wert ist.
    Dieser code wird ausgeführt, wenn jemand seinen Warenkorb abschickt.
    Es soll dann die nächste Auftragsnummer gelesen werden, und sofort um eins erhöht werden.

    PHP Code:
    Select wert from tab1 WHERE name 'wertfeld' FOR UPDATE
    $aufnr 
    wert;
    Update tab1 SET wert=wert+1 WHERE name 'wertfeld'
    Nun muss folgendes passiert sein:
    zwei user haben die gleiche Auftragsnummer bekommen.
    USER a bestellt und führt Select-Statement aus.
    Noch bevor USER a das Update-Statement ausführt, bestellt User b und führt das Select-Statement aus und bekommt dadurch die gleiche Auftragsnummer.

    bzw. wie kann man diesen Fall verhindern ?


    Gruß jogi

  • #2
    For UPDATE funktioniert nur in Verbindung mit Transaktionen (START TRANSACTION; COMMIT / ROLLBACK) und die wiederum funktionieren nicht mit Standard-MyIsam-Tabellen. InnoDB-Tabellen unterstützen Transaktionen zum Beispiel.

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Comment


    • #3
      Man sollte die entsprechende Spalte dann auch auf UNIQUE setzen, so dass die Werte auch wirklich nur einmal auftreten.
      MM Newmedia | MeinBlog

      Comment


      • #4
        Ist es MySQL? Dann nimm gleich auto_increment.

        Comment


        • #5
          Also ich glaub, ihr versteht mich falsch.

          Weder autoincrement noch unique helfen mir.
          Es ist eine Auftragsnummer, die ich hochzähle, wenn ein Warenkorb abgeschickt wird.

          ich denke ghostgambler Ansatz ist der richtige.


          p.s. es betrifft mysql 5 mit MyISAM-Tabellen.

          Comment


          • #6
            Ich denke schon, dass dir auto_increment helfen würde, aber dafür müsstest du mit Sicherheit einiges abändern...

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Comment


            • #7
              hi

              ich habe es mit auto_increment + offset gelöst.

              d.h. bei neuanlage eines auftrages in das feld der auftragsnummer
              den auto_increment + offset (aus einer configtabelle) geschrieben und damit eine auftragsnummer generiert.

              bei mir war es dann z. b. 2008000000 + 1 = Auftrag 2008000001
              damit hatte ich immer eine eindeutige auftragsnummer
              und die 2008 halt das aktuelle jahr um die aufträge auch nach jahren schnell zuordnen zu können ;-)

              grüße

              Comment

              Working...
              X