2012-05-15 50 views
3

如何在mysql中更新語句後獲取受影響的行(不僅僅是受影響的行數)。如何在mysql中的update語句後得到受影響的行?

+0

可能重複[PHP/MySQL的獲得UPDATE語句受影響的行數(http://stackoverflow.com/questions/8356845/php-mysql-get-受影響的行數 - 更新語句) – stewe

+0

您是否要求提供受影響行數或受影響行數據? –

+0

一個簡單的網站搜索/谷歌可能會給出正確的答案。 http://stackoverflow.com/search?q=mysql+number+of+rows+updated+php http://www.google.co.in/#hl=zh-CN&q=mysql+number+of+rows+updated+ php –

回答

0

由於您使用的是PHP,因此您可以使用mysql_affected_rows()來獲取受影響的行數。

+0

「獲取之前MySQL操作中受影響的行數。」我認爲阿米特想要的是行,而不僅僅是數。 – Gustav

+0

謝謝nischayn22,但我需要該字段的名稱和它們的值。有可能得到那個嗎?古斯塔夫是對的。 – Developer

+0

我不認爲這是可能的,但你可以嘗試@Robin建議的。小心你不要做太多的查詢(性能)。 – nischayn22

1

如果你想實際行和affected rows量不大,簡單地做更新之前獲取它們。

然後,您可以將更新值與選定值進行比較,並通過差異進行過濾。

實施例使用CodeIgniter:

$arr_where = array('date >=' => date('Y-m-d H:i:s')); 

$query = $this->db->get_where('table', $arr_where); 

$arr_update = array('status' => 'TRUE'); 

if ($this->db->update('table', $arr_update, $arr_where)) { 

    foreach($query->result() as $row) 
     foreach(array_keys($arr_update) as $h) 
      if ($row->$h != $arr_update[$h]) 
       echo "This row ({$row->id}) had it's {$h} changed!<br />"; 

} 

對不起CI中供給溶液,但我發現它是simpliest例子。

要查看$this->db函數的功能,請參閱Active Records

+0

或通過mysql_insert_id()獲取上次修改行的標識。雖然我不確定它是否適用於更新... – Gustav

+0

@gustav這不會在更新操作 –

+0

damit,懷疑 – Gustav

1

你可以嘗試使用:

SET @uids := ''; 
UPDATE <table> 
SET <column1> = <value> 
WHERE <column2> = <value> 
    AND (SELECT @uids := CONCAT_WS(',', @uids, id)); 
SELECT TRIM(LEADING ',' FROM @uids); 
相關問題