Ankündigung

Einklappen
Keine Ankündigung bisher.

INSERT mit IF-Abfrage

Einklappen

Neue Werbung 2019

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

  • INSERT mit IF-Abfrage

    Wie kann man (bestenfalls) in einem SQL-Statement einen INSERT INTO..
    Befehl ausführen der jedoch nur denn ausgeführt wird, wenn ein Wert (nicht der Key) noch NICHT vorhanden ist. Es soll kein UPDATE bei schon vorhandenen Einträgen durchgeführt werden.

    Der Vollständigkeit halber hier die relevanten Felder der Tabelle:

    CREATE TABLE tabelle(
    ID AUTO_ .... NOT NULL,
    hash varchar(32),
    value1 varchar(255),
    value2 varchar(255),
    ....
    noch ein paar felder für
    timestamp usw.

    PRIMARY KEY(ID));

    Das zu erreichende Ziel ist leicht erklärt:
    hash ist ein md5 schlüssel dem jeweils einträge zugeordnet werden value1 und value2.

    Die Tabelle wird aus einer datei heraus aktualisiert die erst mit fopen() und explode() aufbereitet werden muss.
    Es liegt letztlich ein Array vor, dessen Werte sind Arrays mit diesen drei strings: hash,value1 und value2.

    Es ist nicht anders zu bewerkstelligen, aber die Datei aus der aktualisiert wird muss immer komplett eingelesen werden. Die Reihenfolge in der Einträge geschrieben werden ändert sich ständig. Zudem muss die Datei immer alle Werte aus der DB beinhalten und erhält im Betrieb eben neue Einträge in die Tabelle sollen. Der Ablauf ist absolut unveränderlich.

    Ich möchten nicht erst die Daten mit PHP auslesen und sie dann mit einer Schleife oder array_diff ausselektieren.

    Es muss doch möglich sein das in das INSERT-Statement mittels WHERE und SUBSELECT einzubauen. Ich bin schon ganz wuschig im Kopf, weil ich es nicht auf die Reihe bekomme. DIE SQL-Referenz ist mir da wenig behilflich.
    Würde mir bitte wer den Funken der Erleuchtung über die Birne braten? Danke schon mal... .

    Irgendwie so:
    INSERT INTO tabelle(hash,value1,value2)VALUES('$hash','$wert1' ,'$wert2') WHERE SELECT ...?? NOT IN ... puhhhh, ich hatte das schon alles

    oder über eine IF THEN Abfolge

    IF NOT EXISTS.... THEN....

  • #2
    unique key setzen

    Kommentar


    • #3
      Du kannst wie erwaehnt die Spalte auf UNIQUE setzen (dafuer ist sie da) und dann ein INSERT machen (ohne Bedingung). Du wirst dann einen MySQL-Error ala DUPLICATE KEY bekommen. Das heisst mysql_query() liefert dir FALSE zurueck. Teste den dann ueber mysql_errno() erzeugten Fehlercode, ob er der des DUPLICATE KEY ist (einfach einmalig testen und mysql_errno() Ausgabe lesen und verwenden, oder googlen).
      "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

      Kommentar


      • #4
        Oder man macht das mit dem Unique und INSERT INTO... ON DUPLICATE KEY UPDATE, nur das man halt nix updatet, dann kommt auch kein MySQL-Error.

        Kommentar


        • #5
          Jo, erst mal danke an alle die mir hier weitergeholfen haben!
          @Chriz: Wo packe ich das UNIQUE Statement bei einer CREATE TABLE Anweisung hin (...i know mysql.de... bin jetzt mal bequem )

          @cycap: Den Ansatz verstehe ich nicht ganz:
          INSERT INTO... ON DUPLICATE KEY UPDATE ohne Update?

          Kommentar


          • #6
            rtfm

            Kommentar


            • #7
              Zitat von __tostring Beitrag anzeigen
              @cycap: Den Ansatz verstehe ich nicht ganz:
              INSERT INTO... ON DUPLICATE KEY UPDATE ohne Update?
              Ja ein Update auf den Unique-Key zum Beispiel, da ändert sich ja nix...

              INSERT INTO tabelle (id,value1,value2) VALUES (1,2,3) ON DUPLICATE KEY UPDATE id=VALUES(id)

              Kommentar


              • #8
                Zitat von HPR1974 Beitrag anzeigen
                rtfm
                das kann ich nur Unterstreichen:

                Zitat von HPR1974 Beitrag anzeigen
                rtfm
                Und die Aussage

                (...i know mysql.de... bin jetzt mal bequem )
                finde ich eine absolute Frechheit

                Kommentar


                • #9
                  Zitat von __tostring Beitrag anzeigen
                  Wo packe ich das UNIQUE Statement bei einer CREATE TABLE Anweisung hin (...i know mysql.de... bin jetzt mal bequem )
                  CREATE INDEX

                  Zitat von __tostring Beitrag anzeigen
                  Den Ansatz verstehe ich nicht ganz:
                  INSERT INTO... ON DUPLICATE KEY UPDATE ohne Update?
                  Z.B.
                  Code:
                  INSERT INTO 
                  	...
                  ON DUPLICATE KEY UPDATE set 1 = 1
                  Gruss
                  L

                  Kommentar


                  • #10
                    @HPR1974: Danke für Deinen geistreichen Beitrag und bidde nicht noch mehr davon, danke.

                    Kommentar


                    • #11
                      @lazydog Super! Vielen Dank dem faulen Hund

                      Kommentar


                      • #12
                        @HPR1974: Danke für Deinen geistreichen Beitrag und bidde nicht noch mehr davon, danke.
                        (Mehr als) ein Funken Wahrheit ist aber dran.
                        HPR war eben auch
                        mal bequem
                        Selbständiges Arbeiten sollte immer noch die Grundlage der Problemlösung sein. Nix für ungut.
                        [COLOR="#F5F5FF"]--[/COLOR]
                        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                        [COLOR="#F5F5FF"]
                        --[/COLOR]

                        Kommentar

                        Lädt...
                        X