插入最大值(最大+ 1)

时间:2011-12-17 07:06:01

标签: mysql

我有一张桌子(foo)我已经在id上有一张PK:

id      name      rank
-----------------------
 1      AAAA        2
 2      BBBB        1

我想插入一个新行,我知道列idname的值,并希望rank取值大于前面同一列中的任何其他值行(类似于auto_increment为我们所做的)。

即。如果我要添加value = CCCC行,rank列的值应为3。如果可能的话,我需要在复合语句中这样做。我尝试了以下不起作用。

insert into foo (`name`, `rank`)
values ('CCCC', (select max(`rank`) from `foo`))

这给了我以下错误:

You can't specify target table 'foo' for update in FROM clause

注意:我最好将rank列作为auto_increment字段,但显然不允许这样做,因为我已经有了PK。

PS:我需要能够在不使用存储过程的情况下从PHP执行此语句。

1 个答案:

答案 0 :(得分:2)

首先尝试这一点,它会立即从你的帖子中获得:

INSERT INTO foo (`name`, `rank`)
SELECT 'CCCC', (MAX(`rank`) + 1) AS rank
FROM `foo`

然后使用PDO,我认为这样可行:

...
$sql = "INSERT INTO foo (`name`, `rank`) SELECT ?, (MAX(`rank`) + 1) AS rank FROM `foo`"
$name = "CCCC";
$st = $pd->prepare($sql);
$st->bindValue(1, $name);

try {
    $retval = $st->execute();
} catch (PDOException $pdoex) {
...

不确定我是否在句法上正确但这应该是关于它的要点......我想

Err .. lemme知道SQL是否有效,至少:D