Ankündigung

Einklappen
Keine Ankündigung bisher.

QUERY Fehler

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

  • QUERY Fehler

    Hallo liebe Leute,

    ich bin wieder mal nach einer schlanken Lösung. Bekomme aber immer einen Formfehler angezeigt. Ich habe schon viele Stellen nachgelesen aber keine Antwort gefunden.
    Code:
    UPDATE `iplook` SET `mad_try` = `mad_try`+1
          WHERE `ip`='::1' AND `email`= 'olaf@t.de'
          IF @@ROWCOUNT = 0
              INSERT INTO `iplook`
    (`ip`,`email`,`mad_try`,`block_ip`)
                VALUES ('::1','olaf@t.de', 1, 0) 
    
    MySQL meldet: Dokumentation
    #1064 - Fehler in der SQL-Syntax.
     Bitte die korrekte Syntax im Handbuch nachschlagen bei 'IF @@ROWCOUNT = 0
      INSERT INTO `iplook` (`ip`,`email`,`mad_try`' in Zeile 3
    Wo ist der Fehler? ROWCOUNT wird es anders geschrieben? Ich sehe keinen Syntaxfehler
    Ich wäre über einen Tipp dankbar.
    P:S: man könnte es auch in PHP machen, das ist mir schon klar, doch ich denke das ist besser.


  • #2
    MSSQL !== MySQL

    Du kannst nicht einfach den MSSQL Query in MySQL nutzen.
    "Software is like Sex, it's best if it's free." - Linus Torvalds

    Kommentar


    • #3
      Wo ist der Fehler?
      Na zumindest mal kein Trennzeichen zwischen unterschiedlichen Statements.

      Wahrscheinlich suchst du INSERT ... ON DUPLICATE KEY UPDATE ...

      Kommentar


      • #4
        c
        Zitat von JaMa Beitrag anzeigen
        MSSQL !== MySQL

        Du kannst nicht einfach den MSSQL Query in MySQL nutzen.
        danke, ich habe imer unter sql lösungen gesucht. Gibt es denn eine ähnliche Lösung? Mein Gedanke ist das ich wenn eine unique vorhanden ist sie schnell aktualsiere.

        Kommentar


        • #5
          Zitat von Dormilich Beitrag anzeigen
          Na zumindest mal kein Trennzeichen zwischen unterschiedlichen Statements.

          Wahrscheinlich suchst du INSERT ... ON DUPLICATE KEY UPDATE ...
          OH sorry für den vorherigen text, ich habe in sql gefunden was du meinst. Danke genau das war es top danke

          Kommentar


          • #6
            Schau dir das nochmals genau an, ich denke das ist genau was du suchst. Wenn ein Key/Index schon vorhanden dann Update und sonst ein Insert. Der "Key" kann eine ID sein, oder ein Constriant oder was auch immer.
            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Aber mir stellt sich jetzt ein andere Frage. Die ist grundsätzlich. Ich würde diese Art gerne grundsätzlich verwenden, doch wie bekomme ich dann an z.B. insert_id bzw. bei update wie komme ich an die betroffene id?

              Kommentar


              • #8
                Die brauchst du ja nicht. Setzte einen gemeinsamen Unique-Index auf die beiden Spalten email und ip und geh da dann drauf. So irgendwie (hier zusammengetippt, ist syntaktisch sicher nicht ganz richtig, aber als Beispiel sollte es reichen)

                Code:
                INSERT `iplook`
                   (`ip`,`email`,`mad_try`,`block_ip`) VALUES ('::1','olaf@t.de', 1, 0)
                
                ON DUPLICATE KEY UPDATE 'iplook`
                  SET `mad_try` = `mad_try`+1 WHERE `ip`='::1' AND `email`= 'olaf@t.de'
                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Zitat von hausl Beitrag anzeigen
                  Die brauchst du ja nicht. Setzte einen gemeinsamen Unique-Index auf die beiden Spalten email und ip und geh da dann drauf. So irgendwie (hier zusammengetippt, ist syntaktisch sicher nicht ganz richtig, aber als Beispiel sollte es reichen)

                  Code:
                  INSERT `iplook`
                  (`ip`,`email`,`mad_try`,`block_ip`) VALUES ('::1','olaf@t.de', 1, 0)
                  
                  ON DUPLICATE KEY UPDATE 'iplook`
                  SET `mad_try` = `mad_try`+1 WHERE `ip`='::1' AND `email`= 'olaf@t.de'
                  Da hast du Recht, aber ich möchte später noch abfragen oder weiterverarbeiten. Ich sage mal user x registriert sich, dann gucke ich existiert user x, nein er ist noch nicht da. user x gibt an zu firma b zugehören.
                  Ich checke ist die firma schon vorhanden. Wenn ja, ist die id einfach, aber wenn Firma nicht vorhanden ist, dann trage ich die ein. Dann wird user x angelegt mit der id von Firma b. Bis jetzt mach ich das immer mit php. Doch das mit on duplicate key sieht es einfacher aus. Doch wie packe ich die id der Firam aus dem subquery da rein, bzw, wie lege ich dann das subquery an? Wenn man das alles in einem query erledigen könnte, wäre schon gut.

                  Kommentar


                  • #10
                    und wie weit macht man das? Es geht um Orte, Länder etc.

                    Kommentar


                    • #11
                      Was hat das jetzt mit der oben gezeigten Query ( `mad_try` ...) zu tun?
                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        PHP-Code:
                        /**query */
                        $sql "INSERT INTO `iplook`
                        (`ip`, `email`,`mad_try`,`timepoint`)
                        VALUES (?,?,1,CURRENT_TIMESTAMP)
                        ON DUPLICATE KEY UPDATE `timepoint` = CURRENT_TIMESTAMP,
                        `mad_try` = `mad_try`+1 ;
                        "

                        Bei diesem hier wäre auch die Frage wie kann ich es erweitern? Ich denke an
                        Code:
                        IF `mad_try` > 3 UPDATE ein weiters COLUMN

                        Kommentar


                        • #13
                          Zitat von hausl Beitrag anzeigen
                          Was hat das jetzt mit der oben gezeigten Query ( `mad_try` ...) zu tun?
                          In dem Fall erstmal garnichts, bei dem Query ergaben sich jetzt die Fragen für mich. Denn man könnte damit doch ein schlanke Klasse bauen die viele meiner Anfragen vereinfachen würden.

                          Kommentar


                          • #14
                            aber ich möchte später noch abfragen oder weiterverarbeiten. Ich sage mal user x registriert sich, dann gucke ich existiert user x, nein er ist noch nicht da. user x gibt an zu firma b zugehören.
                            Ich checke ist die firma schon vorhanden. Wenn ja, ist die id einfach, aber wenn Firma nicht vorhanden ist, dann trage ich die ein. Dann wird user x angelegt mit der id von Firma b.
                            und wie weit macht man das? Es geht um Orte, Länder etc.
                            wie kann ich es erweitern?
                            bei dem Query ergaben sich jetzt die Fragen für mich.
                            Denn man könnte damit doch ein schlanke Klasse bauen die viele meiner Anfragen vereinfachen würden.
                            Willst du jetzt (d)ein konkretes Problem lösen oder den Thread in "was wäre wenn" und "wie könnte ich" ausufern lassen? Zu deinem konkreten Problem oben hast du schon einen Lösungsansatz bekommen. Ist das nun erledigt oder nicht?

                            Und generell - zu den anderen Punkten: Achte auf korrektes DB-Design, dann ist sehr viel mit wenig Aufwand möglich.

                            LG
                            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                            PHP.de Wissenssammlung | Kein Support per PN

                            Kommentar


                            • #15
                              ja alles gut

                              Kommentar

                              Lädt...
                              X