[MySQL]REPLACE syntax

uwee

Erfahrenes Mitglied
Hallo an alle!

Ich habe folgendes Problem:
In meiner MySQl Datenbank habe ich eine Tabelle, in der Datengespeichert werden, die aber nur einmalig sein sollen.
Ich arbeite an einem einfachen Shopsystem und möchte, dass ein Artikel nur einmal in Kombination mit einer Session eingetragen werden kann.
Momentan sieht meine Insert-Anweisung folgendermaßen aus:
Code:
INSERT INTO warenkorb (id,session,artikel_nr,menge,name,preis,time)
         VALUES('','$sessionin','$artikelin','1','$namein','$preisin',now());

Nun passiert aber das, was ich verhindern möchte:
Wenn ich zweimal den gleichen Artikel innerhalb einer laufenden Session übertrage, gibt es einen zweiten Eintrag.
DAS will ich aber nicht, es darf die Kombination Session und Artikel_Nr nur EINMAL geben!

Ich habe mir schon viele Seiten von wegen REPLACE angeschaut, nur kommt da immer derselbe Text, mit dem ich absolut nichts anfangen kann. Wenn ich meine Sytax umbaue, auf REPLACE, dann funktioniert es... aber so wie INSERT und löscht ersetzt in Wirklichkeit nichts.

Also die direkte Frage:

WIE muss die Replace-Syntax bei mir aussehen, damit der Fehler nicht kommt?

Danke

UweE
 
Hallo Uwe,

um dein Problem zu lösen gibt es mehrere Möglichkeiten.
Du kannst doch vor dem Insert prüfen ob der Datensatz existiert und
wenn ja ein Update ausführen.

OK, MySQL bietet die Spezialität von Replace.
Die Syntax lautet
Replace INTO Tabelle ([Feldliste]) VALUES (Werteliste)

Das ganze funktioniert aber nur wenn du als Primärschlüssel
Session und Artikel_Nr definierst Woher soll MySQL sonst
wissen ob der Datensatz vorher gelöscht werden soll ?

Folgende Syntax geht auch
REPLACE INTO TABELLE
SET Spalte1 = Wert,
SET Spalte2 = Wert usw.

Jens
 
Hallo Jens, danke für die Antwort...

Ich kann Session und Artikel_Nr nicht als Primärschlüssel verwenden, da die Seesion und die Artikel_Nr öfter vorkommen können, nur in Kombination sollen sie nur einmal vorkommen und ich bekomm bei meinem phpMyAdmin keinen kombinierten Schlüssel hin.

das mit dem Prüfen kannst du dir ja mal hier anschaun, da konnte mir leider keiner zu helfen.

Wenn ich statt insert einfach replace nehme wird nur der normale insert-Befehl aufgeführt.
 
Die Kombination von beiden Feldern als PK kannst du so
anlegen.

ALTER TABLE `warenkorb` ADD PRIMARY KEY (`session`,`artikel_nr`);

Das geht aber nur wenn noch keine doppelten Einträge dieser Kombination
existieren. Ansonsten musst du diese Einträge erst löschen.


wenn ein PK bereits existiert musst du ihn vorher löschen mit

ALTER TABLE `warenkorb` DROP PRIMARY KEY;


HTH

Jens
 
und dann sollte diese Syntax greifen?
Replace INTO Tabelle ([Feldliste]) VALUES (Werteliste)

ich kann das so kombiniert nicht ansetzen...
meine ID ist auto_increment und das geht nicht mehr, wenn sie kein Schlüssel mehr ist.

Die ID brauche ich, um nachträglich die Menge der Artikel im Warenkorb zu ändern.
Oder ich muss bei der ID einen einmaligen Zufallswert einsetzen.
 
Zuletzt bearbeitet:
:) Aber dein Weg funktioniert schonmal, keine doppeleintragungen mehr...

okay, ich hab ihm jetzt einfach gesagt, er soll nicht nach der ID, sondern nach der Kommbi aus Session und Artikel_Nr suchen, womit er die Anzahl der Artikel ändern kann...
Und da diese Kombi nun einmalig ist, funkt das wunderbar

VIELEN VIELEN DANK!
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück