Php 插入数据库MAX(字段)+;1.
我正在尝试向数据库中插入一些值,需要插入的值之一是;-<代码>最大值(固定票价)+1 详情如下:Php 插入数据库MAX(字段)+;1.,php,sql,Php,Sql,我正在尝试向数据库中插入一些值,需要插入的值之一是;-最大值(固定票价)+1 详情如下: public function fixed($fieldDay) { $pdo = new SQL(); $dbh = $pdo->connect(Database::$serverIP, Database::$serverPort, Database::$dbName, Database::$user, Database::$pass); $this->sql =
public function fixed($fieldDay) {
$pdo = new SQL();
$dbh = $pdo->connect(Database::$serverIP, Database::$serverPort, Database::$dbName, Database::$user, Database::$pass);
$this->sql = "INSERT INTO tblfixedfare VALUES (NULL, MAX(FixedFareID)+1, '1', '$fieldDay')";
显然,这是行不通的,但我不确定如何将MAX(FixedFareID)+1值插入数据库
任何帮助都将不胜感激。最好的方法是使用
自动增量列(语法将取决于您的SQL引擎)或使用序列。最好的方法是使用自动增量列(语法将取决于您的SQL引擎)或使用序列。使用子查询:
INSERT INTO tblfixedfare
select NULL, MAX(FixedFareID)+1, '1', '$fieldDay' from tblfixedfare
$this->sql =
"INSERT INTO tblfixedfare
VALUES (NULL, (SELECT MAX(FixedFareID)+1 FROM tblfixedfare), '1', '$fieldDay'";
使用子查询:
$this->sql =
"INSERT INTO tblfixedfare
VALUES (NULL, (SELECT MAX(FixedFareID)+1 FROM tblfixedfare), '1', '$fieldDay'";
你做错了。您的MAX()
需要一个子选择:
或者,将您的FixedFareID
切换为使用自动增量
功能,这可能会更好更快。您做错了。您的MAX()
需要一个子选择:
或者,更好更快的方法是,将您的FixedFareID
切换为使用自动增量
功能。如果您没有自动增量字段,则可以使用如下内容:
INSERT INTO tblfixedfare
SELECT NULL, MAX(FixedFareID)+1, '1', '$fieldDay'
FROM tblfixedfare
所以你的代码应该是:
public function fixed($fieldDay) {
$pdo = new SQL();
$dbh = $pdo->connect(Database::$serverIP, Database::$serverPort, Database::$dbName, Database::$user, Database::$pass);
$this->sql = "INSERT INTO tblfixedfare SELECT NULL, MAX(FixedFareID)+1, '1', '$fieldDay' FROM tblfixedfare";
如果没有自动递增字段,则可以使用如下内容:
INSERT INTO tblfixedfare
SELECT NULL, MAX(FixedFareID)+1, '1', '$fieldDay'
FROM tblfixedfare
所以你的代码应该是:
public function fixed($fieldDay) {
$pdo = new SQL();
$dbh = $pdo->connect(Database::$serverIP, Database::$serverPort, Database::$dbName, Database::$user, Database::$pass);
$this->sql = "INSERT INTO tblfixedfare SELECT NULL, MAX(FixedFareID)+1, '1', '$fieldDay' FROM tblfixedfare";
不能创建标识列吗?您使用的是什么版本的SQL?MySql?如果是:我使用的是MySQL,ID列是自动递增的,FixedFareID不是唯一的,所以我不能使用它。你不能创建一个标识列吗?您使用的是什么版本的SQL?MySql?如果是这样:我使用的是MySQL,ID列是自动递增的,FixedFareID不是唯一的,所以我不能使用它。我会使用它,但我已经在ID列中使用它了,FixedFareID不是唯一的,它总是1或2,然后你的查询将在数据库中插入3,不是吗?因此违反了这条规则。。。MAX会给你“2”,再加上1,是“3”,对不起,我打错了,我会做两次插入,对于这两次插入,fixedfareid将是same@nsilva:您使用的数据库是什么?一个序列肯定会解决这个问题。如果您使用的是Oracle、PostgreSQL、Firebird,那么您可以使用序列。我会使用它,但我已经将它用于ID列,FixedFareID不是唯一的,它总是1或2,然后您的查询将在数据库中插入3,不是吗?因此违反了这条规则。。。MAX会给你“2”,再加上1,是“3”,对不起,我打错了,我会做两次插入,对于这两次插入,fixedfareid将是same@nsilva:您使用的数据库是什么?一个序列肯定会解决这个问题。如果您使用的是Oracle、PostgreSQL、Firebird,那么您可以使用序列。