我有这样的代码:
$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计算受影响的行,即使它是相同的?
答案 0 :(得分:2)
MySQL本身返回受影响的行数,而不是匹配的行数,请参阅the manual。
如果Doctrine会在这里做你想做的事,那就必须执行另一个查询。如果你真的需要这个,你必须自己做。
编辑:稍后在文档中读一句话,我看到mysql_info(PHP中的mysqli_info)会返回此信息。
答案 1 :(得分: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);
}
答案 2 :(得分:0)
Yo可以向数据库添加另一个字段,例如时间戳,并在更新语句中将其设置为NOW()
,这样就会影响所有匹配的行。