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

  • __tostring
    hat ein Thema erstellt INSERT mit IF-Abfrage.

    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....

  • nikosch
    antwortet
    @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.

    Einen Kommentar schreiben:


  • __tostring
    antwortet
    @lazydog Super! Vielen Dank dem faulen Hund

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • lazydog
    antwortet
    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

    Einen Kommentar schreiben:


  • cycap
    antwortet
    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

    Einen Kommentar schreiben:


  • cycap
    antwortet
    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)

    Einen Kommentar schreiben:


  • HPR1974
    antwortet
    rtfm

    Einen Kommentar schreiben:


  • __tostring
    antwortet
    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?

    Einen Kommentar schreiben:


  • cycap
    antwortet
    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.

    Einen Kommentar schreiben:


  • Chriz
    antwortet
    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).

    Einen Kommentar schreiben:


  • HPR1974
    antwortet
    unique key setzen

    Einen Kommentar schreiben:

Lädt...
X