Vous pouvez supprimer la fonctionnalité d'auto-incrémentation de la clé primaire de cette colonne, puis, à chaque fois que vous mettez à jour cette colonne, exécuter une requête qui comptera toutes les lignes de la table, puis exécuter une boucle qui itère à travers ce nombre de lignes en insérant chaque valeur dans la ligne respective, et enfin exécuter une requête qui insère 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 faites. 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 auquel j'ai ajouté une colonne de rang avec la requête dans une requête select, ce qui a donné à 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, de récupérer le tableau associatif et de l'itérer de la même manière, mais en ajoutant une variable qui se met à jour à chaque itération. Cette méthode est moins souple, mais elle permet d'obtenir le même résultat.
$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')");