我有一张桌子(foo
)我已经在id
上有一张PK:
id name rank
-----------------------
1 AAAA 2
2 BBBB 1
我想插入一个新行,我知道列id
和name
的值,并希望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执行此语句。
答案 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