Php 插入数据库MAX(字段)+;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 =

我正在尝试向数据库中插入一些值,需要插入的值之一是;-<代码>最大值(固定票价)+1

详情如下:

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,那么您可以使用序列。