【问题标题】:How to increment a MySQL database row value如何增加 MySQL 数据库行值
【发布时间】:2015-03-24 21:10:24
【问题描述】:

我有一个 MySQL 数据库,其中有一个名为 chapters 的表。

我有一个名为 chapter_number 的列,它是一个整数数据类型,并且不是自动递增的,因为我有另一个唯一标识行的字段。

在插入此表时,我希望 chapter_number 列的值是前一行的 chapter_number 增加 1 (+1)。

这样做的目的是确保每次添加章节时,都会发生正确的排序。

我如何在 PHP 中实现这一点?

这是我的意思的一个例子?

表结构:

$stmt = $db->prepare('INSERT INTO chapters VALUES (?,?,?,?)');
$stmt->execute(array('','title', '2015-04-03', 'chapter 1 body'));

我会为第一个参数输入什么 ^

【问题讨论】:

  • dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; UPDATE table SET c=c+1 WHERE a=1; 基于您的“在插入到此表时”
  • 如果你删除了一行,那么在重置表之前,该行的id不能被重新使用?因此,如果删除第 2 行然后插入新行,则 id 的自动增量将在第 2 行存储 chapter_id =4。
  • “我已经找到了一种重新排序行的方法,如果由于这个原因删除了任何行” - 我不会发布我的第一个链接评论。 INSERT 和 UPDATE 完全是两种不同的动物。 ;-)
  • @Fred-ii- 不太清楚你的意思。如果我希望它是前一行的值 + 1,我正在努力弄清楚我实际上会在查询中为 chapter_number 列输入什么值?
  • 好吧,我不确定您的编辑是否意味着您已经解决了问题。

标签: php mysql


【解决方案1】:
SELECT max(chapter_number) + 1 as total FROM table;

这还允许您稍后通过简单地添加 where 子句将章节分配给多本书

下面的例子是这个语法的样子

insert into table_one (greeting_column, name_column)
SELECT 
     'hello',
     (SELECT max(chapter_number) + 1 as total FROM table)

【讨论】:

  • 这是选择不插入。不回答问题
  • 它确实回答了这个问题。提供的查询可以作为子查询运行以获得正确的结果。
猜你喜欢
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 2014-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多