Vous pouvez supprimer la fonctionnalité d'incrémentation automatique de clé primaire de cette colonne, puis chaque fois que vous mettez à jour cette colonne, exécutez une requête qui comptera toutes les lignes de la table, puis exécutez une boucle qui itère à travers ce nombre de lignes en insérant chaque valeur dans le ligne respective, et enfin exécutez une requête insérant une nouvelle ligne avec la valeur de cette colonne étant le nombre total de lignes plus un. Cela fonctionnera parfaitement et c'est la solution la plus absolue pour quelqu'un qui essaie d'accomplir ce que vous êtes. Voici un exemple de code que vous pouvez utiliser pour la fonction:
$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')");
Ici, j'ai créé un tableau associatif que j'avais ajouté sur une colonne de rang avec la requête dans une requête de sélection, qui donnait à chaque ligne une valeur de rang commençant par 1. J'ai ensuite itéré à travers le tableau associatif.
Une autre option aurait été d'obtenir le nombre de lignes, d'exécuter une requête de sélection de base, d'obtenir le tableau associatif et de l'itérer de la même manière, mais avec une variable supplémentaire qui se met à jour à chaque itération. Ceci est moins flexible mais accomplira la même chose.
$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')");