假设我有一个链接到数据库的表,如下所示:http://www.falkencreative.com/forum/records/view.php
如何使当我删除记录然后添加新记录时,新记录将替换以前删除的记录,并且具有以前删除的 ID 号而不是下一个 ID?
例如
- 红
- 蓝
- 绿
单击按钮删除绿色。
- 红
- 蓝
单击按钮添加新颜色。输入橙色
- 红
- 蓝
- 橙
就目前而言,我正在处理的是:1.红色2.蓝色4. 橙色(什么应该将其设置为 3?
就桌子设置而言,这可能是一件简单的事情,但我不知道该怎么做,而且时间紧迫。谁能指导我应该做什么?
您可能有 2 个选项。更新之前"绿色"值所在的同一行。即:
mysql_query("UPDATE table_name SET color = 'orange' WHERE ID = '3'");
或
mysql_query("UPDATE table_name SET color = 'orange' WHERE color = 'green'");
或
无论您的指定者是什么。
从MySql的角度来看,这应该是最简单的方法。或者,您可以按照最初概述的方式删除它,然后使用 mysql_query("插入到 ....但随后需要重置 MySql PK UID,即:
mysql_query("ALTER TABLE table_name AUTO_INCREMENT = 1");
这将删除您使用的 PK ID 并重新编号所有行。 还是有更简单的解决方案?
不,当您删除数据库行时,如果该列的AUTO_INCREMENT
处于活动状态,它将从序列中获取值。如果删除 3,则序列始终从 3+1 开始。例如,您可以从 php myadmin 查看''设置自动增量值。我不知道你在用什么DBMS,但是使用oracle你可以操纵序列。
所以你有各种各样的方法。
- 复杂:插入''删除时,使用触发器更新序列
- 您使用 3 列:
id
、IdToShow
、Value
。
id
现在是一样的,你可以把它与Autoinc一起使用。 idToShow
也是你展示的。插入时,您可以对表中存在的行进行计数(有多种方法)。
希望对您有所帮助。
您的问题不在于数据库 ID,而在于不了解 ID 和行号之间的区别。它们彼此无关。只需简单地输出循环计数器("$i")而不是 ID。
<?php
for ($i = 1; $i <= foo(); $i++) {
print "<tr><td>{$i}</td><td>...</td></tr>'n";
}
?>
我认为您想更新记录,而不是删除旧记录并插入新记录。
编辑:
如果要插入新记录并为其分配下一个连续 ID,请使用非auto_increment列,并在添加新记录时执行此操作:
INSERT INTO myTable (id, ...) VALUES ( (SELECT MAX(id) + 1 FROM myTable), ...)
我没有方便的数据库来测试这一点,但我认为它会起作用。 但我不确定当桌子是空的时会发生什么。此外,这可能会产生争用条件。