更新数据库中的ID

时间:2012-04-25 08:30:35

标签: php mysql database updating

数据库:

表:新闻

使用列:唯一和主键,自动递增称为ID,内容和标题


代码:

- >创建一个带有文本字段的表单,用户可以在其中输入ID的值以及项目的位置

$form->textField("Position of the item item", "id", false, 30, false, getIfExists("id", $originalValues));

- >将新ID作为查询发布到数据库

$queryvalues["id"]       = $_POST[ "id" ];

当我发布未被其他项目使用的ID时,它会起作用。但是,如果我尝试覆盖ID,它会给我一个错误,并且不会改变任何内容。显然,我需要更新ID,以便它会增加所有冲突的ID,从而允许发布已编辑的ID。

我对如何做到这一点感到有点恼火。我有想法添加一个定义位置的索引号,然后切换到使用数据库ID对列表进行排序,并且只要CMS的用户愿意,更改CMS中的ID就能够更新。

但是,我不太清楚如何处理这个以及是否有更好的选择/解决方案。

有没有人有任何想法/提示/提示?

我尝试使用ON DUPLICATE KEY UPDATE,但到目前为止我没有运气。


修改

好的,现在订购工作。我创建了一个名为Position的新列,只是使用它来订购项目,它工作正常。

但是,如果我添加一个具有相同位置的新项目,它会将其置于另一个位置。所以基本上新的“0”列在旧的“0”下,同时共享相同的密钥。对于如何解决这个问题,有任何的建议吗?我在考虑增加旧的重复键。但不知道这将如何运作。

3 个答案:

答案 0 :(得分:3)

请勿触摸id列,保持原样。创建一个名为“position”的新列并使用它,然后它将允许非唯一值。

您的ID设置为始终唯一,原因是自动增加也无济于事。当您删除内容时,您的id列将不可避免地存在空白,但这不是问题。

答案 1 :(得分:1)

“主键”被强制为唯一且永久保留。它是实体的标识符,不打算用作排序/排序。

要满足您的要求,只需添加int或datetime / timestamp字段,然后添加SELECT * FROM yoour_table ORDER BY field_name

答案 2 :(得分:0)

我了解您要使用该ID来订购商品:请勿这样做。

而是添加名为“ordering”的新列:

  • 在插入项目时,将此字段值设置为ID值
  • 在更新项目位置时,交换正在移动的两个项目之间的位置值