【问题标题】:Increment integer field by 1 starting from a certain row从某一行开始将整数字段加 1
【发布时间】:2014-05-17 06:29:52
【问题描述】:

table1: id, field1(integer), field2, ...

如上图field1是从1到100序列化的整数

我从 php 表单输入一条新记录,其中 field1 值为 45。鉴于此值已存在于表中(从 1 到 100)

**我希望查询将新记录存储在表中现有记录之前,并从第二个 45 开始递增 field1 值 **

非常感谢您的帮助!

【问题讨论】:

  • 举个例子也带有值。
  • 我更新了我的问题...谢谢!
  • 如果 field1 值已经存在,你要存储什么?
  • field1 是表中的一列。我想插入新行,field1 的值为 45,然后将其余行向下递增到 100。所以最后一行中 field1 的值将是 101。

标签: mysql increment


【解决方案1】:

我建议不要这样做。通常,您应该以任意顺序插入行。如果要排序,您可能会按名称或相关值进行排序。

如果你出于某种原因想要有一个特定的排序顺序,那么你可以在两个更新语句中做到这一点:

1:移动所有行为新行腾出空间。

UPDATE YourTable SET Field1 = Field1 + 1 WHERE Field1 >= 45

2:插入新行。

INSERT INTO YourTable (Field1) VALUES (45)

如您所知,这可能会变得低效,因为您实际上是在更新所有行。如果您的表变大,插入行需要更多时间,尤其是在开头。

如果您需要,您可以稍微优化一下,例如,通过保持行之间的间隙。如果您有 100 步的编号,则只需在 4450 处插入行,就在 4400 和 4500 之间。您只需在要插入新行的记录之间没有间隙时重新编号。

【讨论】:

    【解决方案2】:

    你需要明智地运行 2 个 sql

    $input_value = "45";
    $sql1 = "UPDATE table1 SET field1=field1+1 WHERE field1>='$input_value' ";
    
    $sql2 = "INSERT INTO table1 (field1, field2, ....) VALUES('$input_value', '$field2_value', ...); ";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      相关资源
      最近更新 更多