2013-05-07 71 views
0

嘿,我有我的表在MySQL中以下更新:MySQL的加入1至数多更新的行

$dbBuilder = ''; 

foreach($_POST as $key => $value) 
{ 
    if ($value != 'APPROVE') { 
     $dbBuilder = $value . ", " . $dbBuilder; 
    } 
} 

$dbBuilder = '(' . rtrim($dbBuilder, ", ") . ')'; 

UPDATE userCase SET Accepted = 1 WHERE CaseNum in $dbBuilder 

工作正常,因为它应该......但现在我需要修改它允许一个新的QNum为每个的任何CaseNum。

$result = mysql_query("SELECT QNum FROM userCase ORDER BY QNum DESC limit 1"); 

while($row = mysql_fetch_assoc($result)) { 
    $QNum = $row["QNum"] + 1; 
    break; 
} 

UPDATE userCase SET Accepted = 1, QNum = " . $QNum . " WHERE CaseNum in $dbBuilder 

做这上面的方法就是设置QNum相同数量的所有CaseNum“中”的。它需要是唯一的(例如,为每个新行添加1到QNum)。

它只需要比表中最后一个QNum多1。所以当有人“批准”几件事(可以说3件事),它进入上面的查询,它需要是(可以说数据库中的最后一个数字是4)所以它需要是5 ,6,7。我现在的代码只会做5,5,5

我将如何使用相同的CaseNum ....以上代码?

谢谢!

+0

'QNum'是外键吗?为什么它需要是独一无二的?你能给我们一些关于你的数据模型的更多信息吗? – Halcyon 2013-05-07 15:41:33

+0

'UPDATE yourTable SET theColumn = theColumn + 1'? – Kermit 2013-05-07 15:43:57

+0

它只需要比表中最后一个QNum多1个。所以当某人“批准”几件事情**(让我们说3件事)**时,它会进入这个查询并且它需要**(可以说最后一个数字是4)**所以它需要** 5,6,7 **。我现在的代码只会做** 5,5,5 **。 – StealthRT 2013-05-07 15:44:26

回答

0
UPDATE userCase as u1 set Accepted = 1, 
    QNum = (select 
     count(*) 
     from userCase as u2 
     where QNum is not null 
     or (
      u2.CaseNum in (...) 
      and u2.CaseNum < u1.CaseNum 
     )) 
where CaseNum in (...)