如何在mysql中的update语句之后获取受影响的行(而不仅仅是受影响的行数)。
答案 0 :(得分:2)
答案 1 :(得分: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 />";
}
很抱歉在CodeIgniter中提供解决方案,但我发现它是最简单的示例。
要了解$this->db
功能的作用,请参阅Active Records。
答案 2 :(得分:1)
您可以尝试使用:
SET @uids := '';
UPDATE <table>
SET <column1> = <value>
WHERE <column2> = <value>
AND ( SELECT @uids := CONCAT_WS(',', @uids, id) );
SELECT TRIM(LEADING ',' FROM @uids);
答案 3 :(得分:-1)
由于您使用的是php,因此可以使用mysql_affected_rows()来获取受影响的行数。