Sie können die automatische Inkrementierungsfunktion des Primärschlüssels dieser Spalte entfernen. Führen Sie dann jedes Mal, wenn Sie diese Spalte aktualisieren, eine Abfrage aus, die alle Zeilen in der Tabelle zählt, und führen Sie dann eine Schleife aus, die diese Zeilenanzahl durchläuft und jeden Wert in die Spalte einfügt Führen Sie schließlich eine Abfrage aus, in der eine neue Zeile eingefügt wird, wobei der Wert dieser Spalte die Gesamtzahl der Zeilen plus eins ist. Dies funktioniert einwandfrei und ist die absoluteste Lösung für jemanden, der versucht, das zu erreichen, was Sie sind. Hier ist ein Beispiel für Code, den Sie für die Funktion verwenden können:
$table_row_count = mysql_result(mysql_query("SELECT COUNT(`field_1`) FROM `table`"), 0);
$viewsrowsdata = mysql_query("
SELECT `rank`, `field1`, `field2`, `field3`, `field4`
FROM (SELECT (@rank:=@rank+1) as `rank`, `field1`, `field2`, `field3`, `field4`
FROM (SELECT * FROM `views`) a
CROSS JOIN (SELECT @rank:=0) b
ORDER BY rank ASC) c
");
while ($row = mysql_fetch_assoc($viewsrowsdata)) {
$data[] = $row;
}
foreach ($data as $row) {
$new_field_1 = (int)$row['rank'];
$old_field_1 = (int)$row['field1'];
mysql_query("UPDATE `table` SET `field_1` = $new_field_1 WHERE `field_1` = $old_field_1");
}
mysql_query("INSERT INTO `table` (`field1`, `field2`, `field3`, `field4`) VALUES ('$table_row_count' + 1, '$field_2_value', 'field_3_value', 'field_4_value')");
Hier habe ich ein assoziatives Array erstellt, das ich an eine Rangspalte mit der Abfrage innerhalb einer ausgewählten Abfrage angehängt habe, wodurch jeder Zeile ein Rangwert zugewiesen wurde, der mit 1 beginnt. Anschließend habe ich das assoziative Array durchlaufen.
Eine andere Option wäre gewesen, die Zeilenanzahl abzurufen, eine grundlegende Auswahlabfrage auszuführen, das assoziative Array abzurufen und es auf dieselbe Weise zu iterieren, jedoch mit einer hinzugefügten Variablen, die bei jeder Iteration aktualisiert wird. Dies ist weniger flexibel, erreicht aber das Gleiche.
$table_row_count = mysql_result(mysql_query("SELECT COUNT(`field_1`) FROM `table`"), 0);
$viewsrowsdata = mysql_query("SELECT * FROM `table`");
$updated_key = 0;
while ($row = mysql_fetch_assoc($viewsrowsdata)) {
$data[] = $row;
}
foreach ($data as $row) {
$updated_key = $updated_key + 1;
mysql_query("UPDATE `table` SET `field_1` = '$updated_key' WHERE `field_1` = '$row['field_1']'");
}
mysql_query("INSERT INTO `table` (`field1`, `field2`, `field3`, `field4`) VALUES ('$table_row_count' + 1, '$field_2_value', 'field_3_value', 'field_4_value')");