1

数据库:

表:新闻

使用列:唯一键和主键,它们会自动递增,称为 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 中更改 ID 将能够在 CMS 用户希望时更新它。

但是,我不太确定如何解决这个问题以及是否有更好的选择/解决方案。

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

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


编辑:

好的,现在可以订购了。我创建了一个名为 Position 的新列,并用它来订购物品,它工作正常。

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

4

3 回答 3

3

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

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

于 2012-04-25T08:34:34.340 回答
1

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

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

于 2012-04-25T08:49:26.350 回答
0

我了解您想使用 ID 来订购商品:不要那样做。

相反,添加一个名为 "ordering" 的新列:

  • 插入项目时,将此字段值设置为 ID 值
  • 更新项目位置时,交换正在移动的两个项目之间的位置值
于 2012-04-25T08:37:10.950 回答