2011-03-23 72 views
1

Zend中有一種將MySQL列中的整數加1的方法嗎?在MySQL中增加一列

感謝

編輯:

我當前的代碼是這樣的:

$row = $this->find($imageId)->current(); 
$row->votes = // THIS IS WHERE I WANT TO SAY INCREMENT 
$row->save(); 
+1

是 - 你提供更多細節 – bensiu 2011-03-23 04:16:37

+0

你的意思是Zend框架後?如果是這樣,哪個組件? Zend_Db,Zend_Db_Table,別的嗎? – Phil 2011-03-23 04:32:02

回答

0

我可能提供以下建議

$row->votes++; 
+0

一個非常簡單的解決方案。 謝謝。 – edwinNosh 2011-03-23 05:10:55

+2

這遭受連接之間的競爭條件,並且是一個不好的解決方案。 – 2012-08-03 23:01:15

17

是的,有。下面是使用的產品和遞增數量字段的例子:

$table  = 'products'; 
$data  = array('prd_qnty' => new Zend_Db_Expr('prd_qnty + 1')); 
$where[] = $db->quoteInto('pr_id = ?', $this->pr_id); 
$db->update($table, $data, $where); 
+0

對我的舊回答或新回答是否是倒退?我很確定新的是正確的,不是嗎? – RDL 2011-03-23 04:56:38

+0

查看更新的問題。謝謝 – edwinNosh 2011-03-23 05:02:15

+0

是的,'$ row-> votes ++;'是要走的路。將來它有助於在您的問題中顯示相關代碼,以便我們可以指導您找到最佳解決方案。 – RDL 2011-03-23 05:14:17

5

票++不保護免受其他請求的競爭條件,這就是爲什麼它是需要有一個數據庫方案。

例如:假設有兩個請求都在幾乎同一時間

1st request loads object - votes is 500 
2nd request loads object - votes is 500 
1st increments value in memory - votes is 501 
2nd increments value in memory - votes is 501 
1st saves to db - votes is 501 
2nd saves to db - votes is 501 (should be 502)