Bạn có thể loại bỏ chức năng tăng tự động khóa chính của cột đó, sau đó mỗi khi bạn cập nhật cột đó sẽ chạy một truy vấn trước khi đếm tất cả các hàng trong bảng, sau đó chạy một vòng lặp lặp qua số hàng đó chèn từng giá trị vào hàng tương ứng và cuối cùng chạy một truy vấn chèn một hàng mới với giá trị của cột đó là tổng số hàng cộng với một. Điều này sẽ làm việc hoàn hảo và là giải pháp tuyệt đối nhất cho ai đó đang cố gắng hoàn thành những gì bạn đang có. Dưới đây là một ví dụ về mã bạn có thể sử dụng cho hàm:
$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')");
Ở đây tôi đã tạo ra một mảng kết hợp mà tôi đã thêm vào một cột thứ hạng với truy vấn trong một truy vấn chọn, nó cung cấp cho mỗi hàng một giá trị xếp hạng bắt đầu bằng 1. Sau đó tôi lặp lại qua mảng kết hợp.
Một tùy chọn khác sẽ có được số đếm hàng, chạy một truy vấn chọn cơ bản, lấy mảng kết hợp và lặp lại nó theo cùng một cách nhưng với một biến được thêm vào cập nhật qua mỗi lần lặp. Điều này kém linh hoạt nhưng sẽ hoàn thành điều tương tự.
$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')");