Puoi rimuovere la funzionalità di incremento automatico della chiave primaria di quella colonna, quindi ogni volta che aggiorni quella colonna esegui prima una query che conterà tutte le righe nella tabella, quindi esegui un ciclo che scorre attraverso quel conteggio di righe inserendo ogni valore nel rispettiva riga e infine eseguire una query inserendo una nuova riga con il valore di quella colonna pari al conteggio totale delle righe più uno. Funzionerà perfettamente ed è la soluzione più assoluta per qualcuno che cerca di realizzare ciò che sei. Ecco un esempio di codice che è possibile utilizzare per la funzione:
$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')");
Qui ho creato un array associativo che avevo aggiunto su una colonna di rango con la query all'interno di una query selezionata, che dava a ciascuna riga un valore di rango che iniziava con 1. Ho quindi ripetuto l'array associativo.
Un'altra opzione sarebbe stata quella di ottenere il conteggio delle righe, eseguire una query di selezione di base, ottenere l'array associativo e iterarlo allo stesso modo, ma con una variabile aggiunta che si aggiorna attraverso ogni iterazione. Questo è meno flessibile ma realizzerà la stessa cosa.
$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')");