2011-12-17 108 views
0

我有一個表(foo),其中我已經在id一個PK:插入一個最大值(最大+ 1)

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執行此語句。

回答

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

+0

像一個魅力工程!第一個 – 2011-12-17 07:17:00