Diese kleine Methode erzeugt SQL-Queries (postgres) zum Erstellen oder Bearbeiten von Datensätzen. Als Parameter werden die Datensätze, die betreffende Tabelle und die Spalte mit dem Primärschlüssel übergeben.
Code:
function getUpsertSQL($aRows, $sTable, $sIDField)
{
$sSQL = "";
foreach( (array) $aRows as $aRow)
{
$sUpdate = "";
$sWhere = " WHERE ".$sIDField."=".$aRow[$sIDField];
foreach( (array) $aRow as $sColumnName => $mColumnValue)
{
if($sColumnName == $sIDField) continue;
$sColumn = $sColumnName." = ".$mColumnValue;
$sUpdate.= (empty($sUpdate) ? " SET ".$sColumn : ", ".$sColumn);
}
unset($aRow[$sIDField]);
$sSQL.= "UPDATE ".$sTable.$sUpdate.$sWhere.";";
$sSQL.= "INSERT INTO ".$sTable."(".implode(",",array_keys($aRow)).") ";
$sSQL.= "SELECT ".implode(", ", array_values($aRow))." ";
$sSQL.= "WHERE NOT EXISTS (SELECT 1 FROM ".$sTable." ".$sWhere.");";
}
return $sSQL;
}
{
$sSQL = "";
foreach( (array) $aRows as $aRow)
{
$sUpdate = "";
$sWhere = " WHERE ".$sIDField."=".$aRow[$sIDField];
foreach( (array) $aRow as $sColumnName => $mColumnValue)
{
if($sColumnName == $sIDField) continue;
$sColumn = $sColumnName." = ".$mColumnValue;
$sUpdate.= (empty($sUpdate) ? " SET ".$sColumn : ", ".$sColumn);
}
unset($aRow[$sIDField]);
$sSQL.= "UPDATE ".$sTable.$sUpdate.$sWhere.";";
$sSQL.= "INSERT INTO ".$sTable."(".implode(",",array_keys($aRow)).") ";
$sSQL.= "SELECT ".implode(", ", array_values($aRow))." ";
$sSQL.= "WHERE NOT EXISTS (SELECT 1 FROM ".$sTable." ".$sWhere.");";
}
return $sSQL;
}