Eine Entscheidungsabfrage

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

  • Eine Entscheidungsabfrage

    Hi !!!

    Ich hab da mal ne Frage ... *g*

    Ich habe eine Tabelle, in der ein Nutzer persönliche Daten zu sich reinschreiben kann. Wenn er dies das erste Mal tut, wird ein Tupel mit Insert Into erstellt ...

    Wenn der Tupel bereits exisiterit und der Nutzer nur seine Daten ändert, wird dieser Tupel mit Update aktualisiert.

    Nun jage ich jedesmal eine SELECT Abfrage auf die Tabelle los, ob dieser Nutzer bereits in dieser Tabelle vorhanden ist (SELECT * FROM tabelle Where user_id = $benutzer) mache mysql_num_rows und starte dann folgende Abfrage:

    If (anzahl == 1) {
    mache update
    }
    else{
    mache insert
    }

    Nun endlich mal meine Frage: Kann man das nicht eleganter lösen ?

    Dankeschön :-)
    Yeah !

  • #2
    REPLACE INTO
    TBT

    Die zwei wichtigsten Regeln für eine berufliche Karriere:
    1. Verrate niemals alles was du weißt!


    PHP 2 AllPatrizier II Browsergame

    Kommentar


    • #3
      Megaverschärften Dank :-)
      Yeah !

      Kommentar


      • #4
        alternativ kannst du auch immer einen INSERT machen, und wenn ein UNIQUE key enthalten ist, gibts von der DB einen fehler.

        wenn man diesen fehler abfängt/auswertet, kann man dann ein update machen.

        aber TBT steht mehr auf REPLACE ... ;-)
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          oder auch, new in MySQL 4.1.0
          Code:
          INSERT INTO 
            table (a,b,c) 
          VALUES 
            (1,2,3)
          ON DUPLICATE KEY 
          UPDATE 
            c=c+1;
          http://www.mysql.de/doc/en/INSERT.html
          Die Zeit hat ihre Kinder längst gefressen

          Kommentar


          • #6
            Hab leider noch das alte MySQL in der Version 3.x ...

            Tjaha ... und außerdem hab ich jetzt ein Problem mit der Syntax ;-)

            Code:
             
            REPLACE uotm 
            SET 
              monat = '".date(n)."', 
              punkte = punkte + 1, 
              uotm_id = uotm_id, 
              user_id = user_id 
            WHERE 
              user_id = '".$_GET['var2']."' 
            AND 
              monat = '".date(n)."'
            Damit erhalte ich folgenden Fehler:
            Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE user_id = '259' AND monat = '5'' at line 1
            Soll das heissen, ich kann keinen Where-clause mit Replace benutzen ? Aber woher weiß MySQL denn dann, welchen Tupel ich mit Replace behandeln möchte ?
            Yeah !

            Kommentar


            • #7
              Aber woher weiß MySQL denn dann, welchen Tupel ich mit Replace behandeln möchte ?
              REPLACE works exactly like INSERT, except that if an old record in the table has the same value as a new record for a PRIMARY KEY or a UNIQUE index, the old record is deleted before the new record is inserted.
              @mysql.com
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                dann ändert sich doch die id oder ?


                An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

                Kommentar


                • #9
                  ein id feld sollte es in tabellen nicht unbedingt geben, welche du mit REPLACE ansprichst.

                  du musst nur einen UNIQUE oder PRIMARY key haben, welcher jeden datensatz eindeutig kennzeichnet. dann klappt's auch mit REPLACE.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar

                  Lädt...
                  X