Вы можете удалить первичный ключ функции автоматического приращения этого столбца, то каждый раз, когда вы обновляете этот столбец выполнить запрос, прежде чем руки, что будет рассчитывать все строки в table, затем запустите цикл, который выполняет итерацию через этот счетчик строк, вставляя каждое значение в соответствующую строку и, наконец, запускает запрос, вставляя новую строку со значением этого столбца, являющимся итоговым числом строк плюс один. Это будет работать безупречно и является самым абсолютным решением для тех, кто пытается выполнить то, что вы есть. Вот пример кода, который можно использовать для функции:
$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:[email protected]+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')");
У меня есть другие таблицы, которые содержат внешний ключ для этой таблицы, но я только начинаю проект, так что это нормально для меня .. Спасибо! – Jonathan
Возможно, было бы лучше, если вы попытаетесь начать принимать, что ваши идентификаторы не всегда будут последовательными, иначе, когда вы начнете работать над большими проектами, это будет действительно изгонять! –
ALTER TABLE your_table AUTO_INCREMENT = 1 – Sinac