1

假设我有一个链接到这样的数据库的表:http: //www.falkencreative.com/forum/records/view.php

如何使当我删除一条记录然后添加一条新记录时,新记录替换先前删除的记录并具有先前删除的 id 编号而不是下一个 id?

例如

  1. 红色的
  2. 蓝色的
  3. 绿色的

单击按钮删除绿色。

  1. 红色的
  2. 蓝色的

单击按钮添加新颜色。输入橙色

  1. 红色的
  2. 蓝色的
  3. 橙子

就目前而言,我正在处理的是:1. 红色 2. 蓝色 4. 橙色(什么应该设置为 3?)

就桌子设置而言,这可能很简单,但我不知道该怎么做,而且我时间紧迫。谁能指导我应该做什么?

4

4 回答 4

1

您可能有 2 个选项。要么更新“绿色”值之前所在的同一行。IE:

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("INSERT INTO .... 重新插入新行。但随后需要重置 MySql PK UID,即:

mysql_query("ALTER TABLE table_name AUTO_INCREMENT = 1");

这将删除您使用的 PK ID 并重新编号所有行。还是有更简单的解决方案?

于 2012-06-09T18:59:41.160 回答
0

Your problem is not about database IDs, it's about not understanding the difference between an ID and a line number. They have nothing to do with each other. Just simply output the loop counter ("$i") instead of the ID.

<?php
for ($i = 1; $i <= foo(); $i++) {
    print "<tr><td>{$i}</td><td>...</td></tr>\n";
}
?>
于 2012-06-09T19:28:24.330 回答
0

我认为您想更新记录,而不是删除旧记录并插入新记录。

编辑:

如果要插入新记录并为其分配下一个顺序 id,请使用非 auto_increment 列并在添加新记录时执行此操作:

INSERT INTO myTable (id, ...) VALUES ( (SELECT MAX(id) + 1 FROM myTable), ...)

我没有方便的数据库来测试这个,但我认为它会起作用。但是我不确定当桌子是空的时会发生什么。这也可能会产生竞争条件。

于 2012-06-09T18:06:14.150 回答
0

不,当您删除数据库行时,如果该列具有AUTO_INCREMENT活动状态,它将从序列中获取值。如果删除 3,则序列始终从 3+1 开始。例如,您可以从 php myadmin 中查看\设置自动增量值。我不知道您使用的是什么 DBMS,但是使用 oracle 您可以操纵序列。

所以你有各种方法。

  1. 复杂:当您插入\删除时,您会使用触发器更新序列
  2. 您使用 3 列:id, IdToShow, Value.

id现在也是一样,你用autoinc。 idToShow也就是你所展示的。插入时,您可以将其插入计算表中存在的行数(您有多种方法)。

希望它有所帮助。

于 2012-06-09T18:11:00.030 回答