Bu sütunun birincil anahtar otomatik artırma işlevini kaldırabilir, ardından bu sütunu her güncellediğinizde, elden önce tablodaki tüm satırları sayacak bir sorgu çalıştırabilir, ardından bu satır sayımını yineleyen bir döngü çalıştırarak her bir değeri ilgili satır ve son olarak, o sütunun değeri toplam satır sayısı artı bir olan yeni bir satır ekleyen bir sorgu çalıştırın. Bu kusursuz bir şekilde çalışacak ve olduğunuz şeyi başarmaya çalışan biri için en mutlak çözüm olacaktır. İşte işlev için kullanabileceğiniz bir kod örneği:
$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')");
Burada, bir seçme sorgusu içindeki sorguyla birlikte bir sıralama sütununa eklediğim, her satıra 1 ile başlayan bir sıra değeri veren bir ilişkilendirilebilir dizi oluşturdum. Daha sonra ilişkilendirilebilir dizi boyunca yineledim.
Diğer bir seçenek, satır sayısını elde etmek, temel bir seçme sorgusu çalıştırmak, ilişkilendirilebilir diziyi almak ve onu aynı şekilde yinelemek, ancak her yinelemede güncellenen ek bir değişkenle olurdu. Bu daha az esnektir ancak aynı şeyi başaracaktır.
$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')");