REPLACE wert aufaddieren mit SELECT? ++

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

  • REPLACE wert aufaddieren mit SELECT? ++

    Hallo,

    hab mich noch nie sooo intensiv mit REPLACE querys beschäftigt hab erst
    jetzt das Potenzial in Verbindung mit UNIQUE Keys erkannt .

    Leider fehlt es mir noch an einer QUERY Ergänzung hab leider im Forum nichts passendes gefunden, ledeglich einen Hinweiss was mich evtl. auf
    die Richtige Spur gebracht hat.

    Hier mein QUERY:
    ´
    ich will einen wert mit REPLACE aufaddieren also bei clicks steht zb:
    1 nach replace einfach +1 = 2

    Ich weiss das man das mit einem SELECT glaub auch den wert davor aus-
    lesen kann und so addieren nur weiss ich nicht wie diesen verbauen kann,
    im REPLACE?!

    Früher hätte ich halt über Umwege zuerst nen SELECT gemacht geprüft ob Datensatz vorhanden wenn nicht INSERT andernfalls UPDATE aber glaub
    mit REPLACE ist das Perfomancetechnisch schon geschickter oder?

    PHP-Code:

    REPLACE INTO 
    `tbl` ( `position` , `datum` , `clicks` ) 
    VALUES (
    '2''2007-11-06 10:00:00', ++1
    ); 
    ps: UNIQUE KEY is über position und datum gesetzt
    will nur ne STD basierte Statistik

  • #2
    UPDATE table SET clicks = clicks + 1 WHERE ...
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      ja logo das is ja kein Problem, aber ein UPDATE kann ja kein INSERT also
      wenn der Datensatz nicht vorhanden ist kann ich ja auch nix update

      hab hier mal meinen REPLACE erweitert:


      PHP-Code:

      REPLACE INTO 
      `s_stat_start_banner` ( `position` , `datum` , `clicks` ) 
      VALUES (
      '2''2007-11-06 10:00:00', (SELECT clicks+1 FROM s_stat_start_banner 
      WHERE position 
      AND datum '2007-11-06 10:00:00') ) 
      kommt leider der Fehler also vermute ich das ganze nicht möglich weil die
      betroffenen REPLACE tabelle nicht im sub select vorkommen darf oder?:

      #1093 - You can't specify target table 's_stat_start_banner' for update in FROM clause

      mir ist noch eingefallen macht es eigentlich einen Unterschied von der
      Perfomance her wenn man einfach grundsätzlich einen UPDATE macht
      wenn dieser aber fehlschlägt bzw keinen Datensätzen betroffen sind

      DANN
      einen INSERT

      ??
      Zuletzt geändert von tomtherock; 06.12.2007, 11:01.

      Kommentar


      • #4
        INSERT INTO tablelle ... ON DUPLICATE KEY UPDATE clicks=clicks+1
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Aus dem MySQL-Manual:
          - You cannot refer to values from the current row and use them in the new row.
          - Currently, you cannot replace into a table and select from the same table in a subquery.

          Dein Problem läßt sich also nicht mit REPLACE lösen.
          Aber INSERT ... ON DUPLICATE KEY UPDATE wird dich glücklich machen.

          Kommentar


          • #6
            super das funktioniert spitze! Danke dir hab ich wieder was gelernt da muss ich dann wohl einige Scripte von mir überarbeiten hehe


            INSERT INTO `s_stat_start_banner` VALUES (1,'2007-12-06 11:00:00',1) ON DUPLICATE KEY UPDATE clicks=clicks+1

            Danke nochmal

            Kommentar

            Lädt...
            X