schien, dass ich etwas arbeiten musste. (Arg ..)
Also machte ich eine kleine Funktion (basierend auf oben Asumption ON dublicate auf Primärschlüssel in Bezug auf
Funktion alter_data_in_table ($ table, $ Felder, $ data) { GLOBAL $ db;.
/*
expect Index to be primary or unique
so if primary key exists - update else insert
*/
$temp_line = array();
$temp_data = array();
/* Secure sanity in data */
foreach ($data as $line) {
$temp_line = array();
foreach ($line as $value) {
$value = str_ireplace("'", "", $value);
$temp_line[] = "'".$value."'";
}
$temp_data[] = $temp_line;
}
$data = $temp_data;
foreach ($data AS $line) {
$sql = "
INSERT INTO ".$table." (".implode(", ", $fields).") VALUES (".implode(", ", $line).")
ON DUPLICATE KEY UPDATE ";
// Start at 1. Skip ID
for($x=1; $x < sizeof($fields); $x++) {
$line[$x] = str_ireplace("'", "", $line[$x]);
$sql .= $fields[$x]."='".$line[$x]."'";
if ($x+1 == sizeof($fields))
$sql .= ";";
else
$sql .= ", ";
}
mysqli_query($db, $sql) or cc("ERROR: SQL Update Table Data", $sql, mysqli_error($db), 0, $this_document);
}
} // end function alter_data_in_table
Verwendung wäre:
$table = "ticket_stati";
$fields = array('ticket_stati_id', 'locked_record', 'ticket_stati_name', 'ticket_stati_description', 'ticket_stati_color');
$data = array(
array(1, 1, 'Open', 'The ticket is marked as open and not assigned or acked.', '#130a5a'),
array(2, 1, 'Assigned', 'The ticket has been assigned to a user or group', '#11a916'),
array(3, 1, 'Closed', 'The ticket has been closed and are no longer active.', '#1121e7'),
array(4, 1, 'Marked as spam', 'The ticket has been marked as spam and is set for purging', '#ab1d1d'),
array(5, 1, 'Time Started', 'The time has been started and the ticket is active', '#f28282'),
array(6, 1, 'Time Stopped', 'The time has been stopped and the ticket is inactive', '#ddf76b'),
array(7, 1, 'Updated', 'The ticket has been updated', '#42f62d'),
array(8, 1, 'Manual Escalation', 'The ticket has been escalated by a user and nearest leader has been informed.', '#028d00'),
array(9, 1, 'Automatic Escalation', 'The ticket has been automatic escalated and nearest leader has been informed.', '#9a1212'),
array(10, 1, 'Pending Customer', 'The ticket awaits responce from customer', '#44a981'),
array(11, 1, 'Pending Supplier', 'The ticket awaits responce from supplier', '#315e4c'),
array(12, 1, 'Pending User', 'The ticket awaits responce from another user.', '#7ba75c'),
array(13, 1, 'Pending External Consultant', 'The ticket awaits responce from external Consultant', '#6a1792'),
array(14, 1, 'ToDo', 'Ticket marked to be dealt with later', '#804000')
);
alter_data_in_table($table, $fields, $data);
Aus zum Test Bett ;-)
Was sind aktualisierbare Daten? – Borna
Er ;-) Nur daran gedacht musste ich das erklären;) Irgendwelche Möglichkeiten. Ich nehme an, dass ON DUBLICATE PRIMARY-Schlüssel für die Entscheidung verwendet, wenn duplicate existiert. Also sollte alles andere als der Primärschlüssel aktualisiert werden (Im obigen Beispiel, entfernen Sie ticket_stati_id und die entsprechende ID in den Daten und aktualisieren Sie den Rest) Oder nur Daten in $ Daten mit Daten in der Tabelle - und die Felder mit unterschiedlichen Daten - aktualisieren jene. – osomanden
@osomanden Ich habe deinen Kommentar in deine Frage verschoben. – ib11