[SQL allgemein] Abfrage problem

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

  • [SQL allgemein] Abfrage problem

    Hi
    ich hab folgendes Problem.
    Ich hab ein Script das zuerst die Datenbank abfragt

    +----- +-----+
    | wer | was |
    +----- +-----+
    | dani| 0 |
    +----- +-----+

    wenn was = 0 dann wird er auf 1 gesetzt und user dani bekommt 10 punkte auf sein konto.

    Wenn jedoch 2 user gleichzeitig das script aufrufen dann wird gleichzeitig die 1. abfrage ausgeführt. Nun merkt das script aha was ist auf 0. Nun bekommt der user dani 2 mal 10 punkte.
    was kann ich machen?
    Mafia Browsergame - Scripts

    Wer glaubt, ein Christ zu sein, weil er die Kirche besucht, irrt sich. Man wird ja auch kein Auto, wenn man in eine Garage geht.
    Albert Schweitzer (14.01.1875 - 04.08.1965)

  • #2
    1.) poste mal bitte die query
    2.) glaube nicht, dass die abfragen doppelt ablaufen, da mysql die anfragen imho nacheinander abarbeitet.
    3.) Bitte ne kleinere Version des Banners in die Sig, wenn überhaupt.

    Kommentar


    • #3
      Normalerweise umgeht man Fehler die durch so genannte Race-Conditions entstehen indem man die entsprechenden Tabellen LOCKed ... such' mal im MySQL Manual nach LOCK TABLE ... !
      carpe noctem

      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

      Kommentar


      • #4
        $query = "
        select
        spiel_war_hin.*
        from spiel_war_hin
        where wartime <= '$newstasmp' and was != 'b0'
        limit 0,1

        ";
        $result = mysql_db_query($db,$query,$verbindung) or die(mysql_error());
        while ( $row = mysql_fetch_array($result)) {
        $swhid = $row['id'];
        $angreifer = $row['angriefer'];
        $wasden = $row['was'];
        $start = $row['start'];
        $verteidiger = $row['verteidiger'];
        $wartime = $row['wartime'];
        $ende = $row['ende'];
        $amil1 = $row['mil1'];
        $amil2 = $row['mil2'];
        $amil3 = $row['mil3'];
        $amil4 = $row['mil4'];
        $amil5 = $row['mil5'];
        $amil6 = $row['mil6'];
        $amil7 = $row['mil7'];
        $amil8 = $row['mil8'];
        $amil9 = $row['mil9'];
        $g1 = $row['geld'];
        $g2 = $row['stahl'];
        $g3 = $row['zement'];
        $g4 = $row['energie'];

        if($wasden==1 || $wasden==2 || $wasden==3 || $wasden==4){
        mysql_query("UPDATE spiel_war_hin Set was='b0' where id='$swhid'") or die(mysql_error());


        kampf wird ausgeführ ...

        }
        }
        Mafia Browsergame - Scripts

        Wer glaubt, ein Christ zu sein, weil er die Kirche besucht, irrt sich. Man wird ja auch kein Auto, wenn man in eine Garage geht.
        Albert Schweitzer (14.01.1875 - 04.08.1965)

        Kommentar


        • #5
          achso, also zwei queries...

          sollte das nicht mit einem gehen?

          übrigens haben wir [PHP]-Tags...
          EDIT:
          Und den Banner w/solltest du kleiner machen...

          Kommentar


          • #6
            Re: [SQL allgemein] Abfrage problem

            Original geschrieben von garyx7de
            wenn was = 0 dann wird er auf 1 gesetzt und user dani bekommt 10 punkte auf sein konto.
            warum geht
            Code:
            UPDATE tabelle
            SET was = 1, punkte = 10
            WHERE was = 0
            nicht?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              @mrhappiness: nein jedes mal wenn ein kampf ausgeführt wird soll der user xy zb. 10 punkte bekommen, aber ein kampf soll nicht 2 mal ausgeführt werden und das ist mein problem
              Mafia Browsergame - Scripts

              Wer glaubt, ein Christ zu sein, weil er die Kirche besucht, irrt sich. Man wird ja auch kein Auto, wenn man in eine Garage geht.
              Albert Schweitzer (14.01.1875 - 04.08.1965)

              Kommentar


              • #8
                hä???

                Kommentar


                • #9
                  usp sry hab deine frage falsch verstanden.

                  also gehen tut es schon.

                  Code:
                  Ablauf
                      |	user 1 				user 2
                      |	seite aufrufen			seite aufrufen
                      |	script wird ausgeführt 		script wird ausgeführt
                      v	SQL abfrage ob was = 0
                  					SQL abfrage ob was = 0
                  	
                  	wenn was = 0 dann 
                  	update was = 1			wenn was = 0 dann 
                  					update was = 1
                  	
                  	kampf wird ausgeführt...
                  					kampf wird ausgeführt ...
                  	
                  	Script ende			script ende
                  so verständlicher?

                  dort wird nun der kampf 2x ausgeführt da zum zeitpunkt der ersten sqlabfrage im script beidesmal was = 0 ist
                  Mafia Browsergame - Scripts

                  Wer glaubt, ein Christ zu sein, weil er die Kirche besucht, irrt sich. Man wird ja auch kein Auto, wenn man in eine Garage geht.
                  Albert Schweitzer (14.01.1875 - 04.08.1965)

                  Kommentar


                  • #10
                    und ohne select

                    nur mein update?
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      ich muss doch mit dem select aus der datenbank herauslesen ob der kampf ausgeführt werden muss time <= $timestamp und ob der kampf schon ausgeführt wurde.

                      edit:
                      http://dev.mysql.com/doc/mysql/searc...g.html&lang=de

                      meinst du das hier könnte das richtige sein?
                      Mafia Browsergame - Scripts

                      Wer glaubt, ein Christ zu sein, weil er die Kirche besucht, irrt sich. Man wird ja auch kein Auto, wenn man in eine Garage geht.
                      Albert Schweitzer (14.01.1875 - 04.08.1965)

                      Kommentar


                      • #12
                        und auf die idee aus
                        WHERE id = 47
                        einfach
                        WHERE id = 47 AND was = 0
                        zu machen bist du nicht gekommen?


                        sowas wird übrigens transfer genannt...
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          in meinem post paar zeilen weiter unten:

                          PHP-Code:
                          from spiel_war_hin 
                          where wartime 
                          <= '$newstasmp' and was != '0' 
                          ^^

                          stell dir vor: du hast auf browsergame. nun Greift mr.x mr.y an. Der kampf findet um 17 uhr stat. 2 user rufen gleichzeitig das script auf das den kampf berechnet. (fast gleichzeitig) nun werden die sqlabffragen ausgeführt
                          PHP-Code:
                          select
                          spiel_war_hin
                          .*
                          from spiel_war_hin 
                          where wartime 
                          <= '$newstasmp' and was != '0' 
                          da momentan noch keiner der beiden user zum update was = 0 gekommen ist ist beides mal bei der sql abfrage was = 0 und er geht in die ifschleife
                          PHP-Code:
                          if(was == 0){ 
                          update x set was 1

                          kampf asuführen

                          So nun wird der kampf 2 mal ausgeführt.^^ nun verständlicher

                          was wird transfare gennant und was meinst du damit?
                          Mafia Browsergame - Scripts

                          Wer glaubt, ein Christ zu sein, weil er die Kirche besucht, irrt sich. Man wird ja auch kein Auto, wenn man in eine Garage geht.
                          Albert Schweitzer (14.01.1875 - 04.08.1965)

                          Kommentar


                          • #14
                            dann solltest du dirch mal LOCK anschauen, wo, hat dir goth geschrieben
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              *nc*
                              carpe noctem

                              [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                              [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                              Kommentar

                              Lädt...
                              X