Hallo,
ich habe eine MySQL[1]-Tabelle die aktuell etwa folgendermaßen aussieht:
id | foo | bar
---+-----+-----
1 | val | val2
2 | val | val2
Nun habe ich PHP-Array welches entsprechend einem Datensatz aufgebaut ist:
[id] = 3
[foo] = val
[bar] = val2
Das soll mit den Werten in der Datenbank abgeglichen werden - id ist dabei das Eindeutigkeitskriterium.
Aktuell sieht das so aus:
SELECT auf die Tabelle anhand der ID des Arrays.
Sofern ID existiert und ein Datensatz bzw eine Ergebnismenge zurückgeliefert wird, wird das Array verworfen und gegen die Werte aus der Datenbank ersetzt. Wenn die ID noch nicht existiert, wird das Array per INSERT in die Datenbank geschrieben.
Bei einem neuen Eintrag ist also eine Abfrage notwendig, bei einem bestehenden Eintrag sind zwei notwendig - der Regelfall ist, dass der Eintrag schon besteht. Darum gibt es, eine Abfrage einzusparen.
Die Frage nun: gibt es in MySQL[1] eine Möglichkeit, dies mit nur einer Abfrage zu leisten. Ich stelle mir hierzu etwas in die Richtung "INSERT ... ON DUPLICATE KEY UPDATE" vor - nur eben, dass bei doppelten Key nicht upgedatet sondern der bestehende Wert gleich gelesen wird.
Der Hintergrund ist eine Mikrooptimierung - dieses Script MUSS bei jedem Seitenaufruf laufen - der Datebankserver ist allerdings extern und reagiert nicht grade sehr flott - eine Abfrage weniger würde hier bereits viel Ausmachen - etwa 10% der Zeit des Parsens.
Die alternative ist, auf die Datenbank teilweise zu verzichten und die Daten in einem Cookie abzulegen - das möchte ich aber nach Möglichkeit vermeiden.
[1] MySQL ist ein Must-Have-Kriterium - die Sache läuft über eine Abstraktionsschicht die prinzipiell auch andere RDBMS unterstützt, das ist aktuell aber nicht von belang - wäre aber wünschenswert.