Neuen Datensatz bei neuer artikel_id, sonst nur Werte anpassen

annalena49

Mitglied
Hi,

mit folgendem Code füge ich neue Datensätze mit einer artikel_id an.
PHP:
$sql = "INSERT INTO table1 SET  field1='".$files["artikel_id"]."',

Wie kann ich es erreichen, das nur ein neuer Datensatz geschrieben wird, wenn diese artikel_id noch nicht vorhanden ist. Wenn bereits vorhanden sollen die Feldwerte nur angepasst werden, also praktisch ein UPDATE.

Ich habe jetzt ein Datumsfeld und wenn dieses nach einer Woche ein anderes ist, wird ein neuer Datensatz mit der gleichen artikel_id angelegt. Dies soll natürlich nicht sein.
Mit UPDATE kann ich nicht arbeiten, da ja nicht nur vorhandene, sondern auch neue Daten anfallen.

Wie kann ich es erreichen das aktualisiert wird wenn die artikel_id bereits vorhanden ist
und nur wenn es die noch nicht gibt ein neuer Datensatz angelegt wird?

mfg
Annalena
 
mmh, habe ich wohl noch nicht richtig verstanden, zumindest ändert sich so nichts, wenn Datum ( $tag ) anders, werden neue Datensätze immer noch angelegt.

PHP:
$sql = "INSERT INTO table1 SET  field1='".$files["artikel_id"]."',
                                field3='$date_3',
                                field4='$date_4',
                                field5='$tag'
     ON DUPLICATE KEY UPDATE field1 = '".$files["artikel_id"]."'  
";

Neue Datensätze sollen aber nur wenn field1 sich ändert.
Was mache ich falsch?

mfg
Annalena
 
Hi,

also erstens müsste field1 dann natürlich auch UNIQUE oder ein PRIMARY KEY sein, wie deutlich in der Doku steht.
Zweitens ergibt Deine ON DUPLICATE KEY-Klausel irgendwie keinen Sinn. Wieso "UPDATE field1 = ..."? Du möchtest nicht die artikel_id ändern, sondern den Inhalt der anderen Felder des Datensatzes mit der artikel_id.
Schau Dir das Beispiel in der Doku nochmal genau an.

LG
 
Hi,

field1 war nicht als PRIMARY KEY deklariert, nun klappt es.

Nun soll noch ein zusätzliches Feld berücksichtigt werden. Dabei stelle ich fest, das bei einem ganz normalem Feld mit varchar(20) keine Texte übernommen werden sondern ausschließlich Ziffern. Dies ist mir beim Datumsfeld natürlich nicht weiter aufgefallen.
Wie kann ich in meinem Textfeld auch Texte aufnehmen?

Beispiel:
das geht = 123456
das nicht = abcdefg
auch nicht= .-?*/_@ ,
berechnet= 2009-02-02 wird zu 2005

mfg
Annalena
 
Zuletzt bearbeitet:
hi kuddeldaddeldu,

ich wollt es erst nicht glauben. Es wird alles so gemacht wie es sein soll, aber nur solange es sich um Ziffern handelt.

Ist Text, oder Leerschritt oder sonstwas dabei passiert nichts, es bleibt der alte Zahlenwert unverändert in der SQL-Spalte stehen. Kommen hingegen neue/andere Ziffern, dann werden diese auch genauso übernommen und in der Spalte eingetragen.

Ich habe den Wert an eine Variable übergeben. Diese Variable lasse ich mir vorher auch noch anzeigen. Gebe ich einen normalen Textstring an die Variable wird mir das Ergebnis ordentlich angezeigt, aber meine SQL-Spalte ändert sich nicht.
Gebe ich eine Ziffernfolge an die gleiche Variable, wird mir auch dieser Wert korrekt angezeigt und jetzt plötzlich auch in der SQL-Spalte geändert.
Gebe ich dann wieder einen Textstring ein, bleibt meine Spalte wieder unverändert.

Was nun?
 
hier der entsprechende Bereich
PHP:
.......

#$date_4 = "20090225";
$date_4 = "abcdefgh";

echo = $date_4 <br>;

$sql = "INSERT INTO table1 SET  field1='".$files["artikel_id"]."', 
                                field3='$date_3', 
                                field4='$date_4', 
                                field5='$tag' 
     ON DUPLICATE KEY UPDATE field4 = $date_4   
";
 
Um einen String gehören in einer MySQL-Abfrage Hochkommata. Du hast sie doch bei den anderen Feldern auch verwendet. Und wenn Du in Deinem Script Fehler abfangen würdest, hättest Du auch bemerkt, dass die Abfrage fehlschlägt und mysql_error() Dir eine entsprechende Fehlermeldung liefert.

LG
 
Zurück