1

我有这样的代码:

    $updateSQL = "UPDATE `Rooms` R SET R.Revenue = {$s['Revenue']}, R.Ave_rent = {$s['Ave_Rent']}
                  WHERE R.Facility_ID={$s['Facility_ID']} AND R.Cur_Year={$s['Year']} AND R.Cur_Month={$s['Month']}";

    $affectedRows = $this->em->getConnection()->executeUpdate($updateSQL);
    if($affectedRows > 0) { ... }

一切正常。我需要知道有多少行符合我的条件的唯一问题R.Facility_ID={$s['Facility_ID']} AND R.Cur_Year={$s['Year']} AND R.Cur_Month={$s['Month']}我不关心它们是否受到影响我不想再使用一个选择。

也许mysql有一些设置来计算受影响的行,即使是相同的?

4

3 回答 3

2

MySQL 本身返回受影响的行数,而不是匹配的行数,请参阅手册

如果 Doctrine 可以在这里做你想做的事,它就必须执行另一个查询。如果你真的需要这个,你必须自己做。

编辑:稍后在文档中阅读一句话,我看到mysql_info( PHP 中的mysqli_info)返回此信息。

于 2012-06-27T15:59:16.940 回答
0

不确定这个:逻辑是通过 SQL 存在的,但是......

SELECT COUNT(R.Facility_ID), R.Cur_Year, r.Cur_Month from Rooms R
inner join
ON R.Facility_ID={$s['Facility_ID']} AND R.Cur_Year={$s['Year']} AND R.Cur_Month={$s['Month']};

甚至对你的 php 也有类似的东西:

$aff_rows = 0;

foreach($sql as $current_sql)
{
 $updateResult = mysqli_query($link, $current_sql); 
 $aff_rows = $aff_rows + mysqli_affected_rows($link);
}
于 2012-06-27T15:59:01.323 回答
0

你可以在数据库中添加另一个字段,比如时间戳,并NOW()在你的更新语句中设置它,这样所有匹配的行都会受到影响。

于 2012-06-27T16:15:50.320 回答