1

有人可以帮我获取此代码,以便在删除一行后将主键 $idfilm 重新编号为连续顺序吗?当我删除表中设置为 auto_increment 的主键的所有数据时,它从它离开的最后一个数字开始。

我猜这是正常的,因为它是唯一的密钥。如果是这样,那么我如何让我的 $_POST['checkbox'] 等于相同的唯一行号,以便我可以“DELETE mytable where $_POST['checkbox'] = the unique key row?

请记住,$id_actor 是另一个表的外键。

$row_number = 1;
while ($row = mysql_fetch_array($result)) {

$id_actor= $row["id_actor"];
$idfilm= $row["idfilm"]; 
$filmTitle= $row["filmTitle"];
$filmRole= $row["filmRole"];
$filmDirector= $row["filmDirector"];


echo"<tr>";
echo '<td><input name="checkbox[]" value="$idfilm'.$row_number.'" type="checkbox" 
id="checkbox'.$row_number.'" /></td>';


for ($i=0; $i<5; $i++)  {
   echo"<td> $row[$i]</td>";
}
echo"</tr>";

$row_number++;
}
echo"</table>";

..................................................... .....................................

这是我的删除代码,它不会删除任何内容,因为 $del_id 与 $idfilm 不匹配。

if(isset($_POST['delete'])) {
if(array_key_exists('checkbox',$_POST)) {  
foreach ($_POST['checkbox'] as $del_id) {
echo $del_id;  
$sql = "DELETE FROM filmInfo WHERE 'idfilm' = '$del_id' "; //This line needs work
$result = mysql_query($sql) or die(mysql_error()); 
if(mysql_affected_rows($result)) echo 'Selected data rows Deleted';
}
}

}
4

3 回答 3

1

我相信您需要处理的唯一更改是:

改变value="$idfilm'.$row_number.'"

value="'.$idfilm.'"

不建议在 db 表中不必要地添加操作所有行(用于 id 更改)的重载。

于 2013-09-17T02:57:05.643 回答
0

您的查询应该像

$sql = "DELETE FROM filmInfo WHERE idfilm = '$del_id' ";

于 2013-09-17T05:20:48.980 回答
0

我会让 MySQL 为你做这件事。尝试在删除行后重新排序:

SET @count = 0;
UPDATE `users` SET `users`.`ID` = @count:= @count + 1;

然后您可以将 AUTO_INCREMENT 值更新为原始表的最大 ID:

ALTER TABLE `users` AUTO_INCREMENT = (SELECT MAX(`users`.`ID`) FROM `users`);

希望这可以帮助。

于 2013-09-17T02:52:40.467 回答