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']}は、それらが影響を受けたかどうかに関係なく、もう1つの選択を使用したくないということです。

同じだったとしても、mysqlが影響を受ける行をカウントするための設定があるかもしれませんか?

4

3 に答える 3

2

MySQL 自体は、一致した行の数ではなく、影響を受けた行の数を返します。マニュアルを参照してください。

Doctrine がここであなたが望むことを行うとしたら、別のクエリを実行する必要があります。これが本当に必要な場合は、自分で行う必要があります。

編集: ドキュメントの後半の 1 文を読むと、mysql_info ( PHP のmysqli_info ) がこの情報を返すことがわかります。

于 2012-06-27T15:59:16.940 に答える
0

タイムスタンプなどの別のフィールドをDBに追加NOW()し、更新ステートメントで設定すると、一致したすべての行が影響を受けます。

于 2012-06-27T16:15:50.320 に答える
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 に答える