คุณสามารถลบฟังก์ชันการเพิ่มอัตโนมัติของคีย์หลักของคอลัมน์นั้นได้ทุกครั้งที่คุณอัปเดตคอลัมน์นั้นให้เรียกใช้แบบสอบถามก่อนที่จะนับแถวทั้งหมดในตารางจากนั้นเรียกใช้ลูปที่วนซ้ำผ่านการนับแถวนั้นโดยแทรกแต่ละค่าลงใน แถวตามลำดับและสุดท้ายเรียกใช้แบบสอบถามโดยแทรกแถวใหม่โดยให้ค่าของคอลัมน์นั้นเป็นจำนวนแถวทั้งหมดบวกหนึ่ง วิธีนี้จะทำงานได้อย่างไม่มีที่ติและเป็นทางออกที่ดีที่สุดสำหรับคนที่พยายามทำสิ่งที่คุณเป็นให้สำเร็จ นี่คือตัวอย่างของรหัสที่คุณอาจใช้สำหรับฟังก์ชัน:
$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')");
ที่นี่ฉันสร้างอาร์เรย์ที่เชื่อมโยงซึ่งฉันได้ต่อท้ายคอลัมน์อันดับด้วยคิวรีภายในคิวรีแบบเลือกซึ่งทำให้แต่ละแถวมีค่าอันดับเริ่มต้นด้วย 1 จากนั้นฉันจะวนซ้ำผ่านอาร์เรย์ที่เชื่อมโยง
อีกทางเลือกหนึ่งคือรับจำนวนแถวเรียกใช้แบบสอบถามเลือกพื้นฐานรับอาร์เรย์เชื่อมโยงและวนซ้ำด้วยวิธีเดียวกัน แต่มีตัวแปรเพิ่มเติมที่อัปเดตผ่านการทำซ้ำแต่ละครั้ง สิ่งนี้มีความยืดหยุ่นน้อยกว่า แต่จะสำเร็จในสิ่งเดียวกัน
$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')");