php - MySQL:使用同一表中列的最大值插入新记录

标签 php mysql

我需要INSERT 一条新记录,在新插入的行中使用position 列的MAX 值加一。因此,如果 MAX 值为 14,则下一个插入行的位置列值应为 15。

这是我当前的代码,可以正常工作,但需要 2 个单独的查询:

# get position order
$sql = 'SELECT MAX(position) FROM store_item_photo WHERE id_item = 3';
$stmt = cnn()->prepare($sql);
$stmt->execute();
$position = $stmt->fetchColumn();
$position++;

# photo: new record
$sql = 'INSERT INTO store_item_photo (id_item, position) VALUES (3, :position)';
$stmt = cnn()->prepare($sql);
$stmt->bindValue(':position', $position, PDO::PARAM_INT);
$stmt->execute();

我想知道是否有某种方法可以通过一个查询获得相同的结果:

# photo: new record (one query)
$sql = 'INSERT INTO store_item_photo (id_item, position) VALUES (3, (SELECT MAX(position) FROM store_item_photo WHERE id_item = 3) + 1)';
$stmt = cnn()->prepare($sql);
$stmt->execute();

该测试抛出错误。是否可以通过类似的方法实现这一目标?

我在 sqlfiddle 中构建了模式:http://sqlfiddle.com/#!9/228058/1

最佳答案

如果您想在插入中使用子查询,则不必使用 VALUES

试试这个查询:

INSERT INTO store_item_photo (id_item, position)
  SELECT
    3 AS id_item,
    MAX(position) + 1
  FROM store_item_photo 
  WHERE id_item = 3;

关于php - MySQL:使用同一表中列的最大值插入新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55178152/

相关文章:

php - 如何使用 CURRENT_TIMESTAMP 在 mysql 中将 Gregorian 格式转换为 Solar 格式

Mysql子查询返回null

php - 我可以将这两个选择查询合并为一个吗?

php - ZF2 中的 CORS POST 请求变为 OPTIONS 请求

PHP 脚本因本地 IP 更改而挂起

php - 使用 yii2 迁移从列中删除 UNIQUE

php - wordpress functions.php 没有为 CSS 显示任何内容

mysql - Talend Open Studio for BigData(5.6.2) 的 tSqoopImport 组件在连接到 MapR 集群上的 MySQL 数据库时抛出错误

mysql - 比萨与食品 - 数据库设计

php - 上传多个文件并将路径保存到数据库时出现问题