dedlfix: MySQL: Bevor Insert -> prüfen ob Schlüsselfelder bereits vorhanden

Beitrag lesen

Erster Ansatzpunkt:
select artikel,farbe from bewegungen where artikel = $artikel
and farbe = $farbe;
Als nächstes würde ich die Anzahl der zurückgegebenen Zeilen
prüfen und dementsprechend handeln -> 1 = Update 0 = Insert.
Ist die Vorgehensweiße korrekt oder habe ich etwas vergessen
bzw. könnt Ihr mir einen besseren Weg zeigen?

Wenn du nur die Anzahl brauchst solltest du select count(*) from ... where ... verwenden. Das ergibt dann genau einen einzelnen Wert als Ergebnis und keine ungenutzte beliebig große Menge.

So wie du schreibst gibt es die Kombination Artikel + Farbe jeweils nur einmal. Dann hast du da sicherlich einen Unique Index über diese beiden Felder eingerichtet. Wenn nicht, solltest du das tun, denn das brauchst mein Lösungsvorschlag.

1. Abfragen des bisherigen Bestandes
$anzahl = 0;
$sql = "select anzahl from bestand where artikel=$artikel and farbe=$farbe";
$result = mysql_query($sql, $connection);
while ($row = mysql_fetch_array($result))
  $anzahl = $row['anzahl'];

Damit hast du in $anzahl entweder 0 oder die Anzahl in der aus der DB, wenn vorhanden.

2. Anzahl +/- Bewegung
$anzahl += $bewegungsanzahl;

3. Einfügen mit eventuellem vorherigen Löschen eines bereits bestehenden Eintrages

REPLACE bestand (artikel,farbe,anzahl) VALUES ($artikel, $farbe, $anzahl);

Hier kommt der Unique Index zum wirken. Ist ein Datensatz mit $artikel und $farbe bereits vorhanden wird dieser erst gelöscht bevor das Replace den/einen neuen Datensatz einfügt.

P.s. In meinem Beispiel sind weder die von der DB benötigten 'Maskierungen' noch mysql_real_escape_string() enthalten. Diese musst du bei Bedarf (VARCHAR-Felder) noch einfügen.