Anda bisa menghapus fungsi kenaikan otomatis kunci utama kolom itu, lalu setiap kali Anda memperbarui kolom itu jalankan kueri sebelumnya yang akan menghitung semua baris dalam tabel, lalu jalankan loop yang beralih melalui penghitungan baris yang memasukkan setiap nilai ke dalam baris masing-masing, dan akhirnya jalankan kueri yang menyisipkan baris baru dengan nilai kolom itu menjadi jumlah total baris ditambah satu. Ini akan bekerja dengan sempurna dan merupakan solusi paling absolut untuk seseorang yang berusaha mencapai apa Anda. Berikut adalah contoh kode yang dapat Anda gunakan untuk fungsi:
$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')");
Di sini saya membuat array asosiatif yang telah saya tambahkan pada kolom peringkat dengan kueri dalam kueri pemilihan, yang memberi setiap baris nilai peringkat dimulai dengan 1. Saya kemudian mengulangi melalui array asosiatif.
Opsi lain adalah untuk mendapatkan jumlah baris, menjalankan kueri pemilihan dasar, mendapatkan array asosiatif dan mengulanginya melalui cara yang sama tetapi dengan variabel tambahan yang diperbarui melalui setiap iterasi. Ini kurang fleksibel tetapi akan mencapai hal yang sama.
$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')");