2

助けが必要です。注意: 以下のコード行は、主なアイデアの例にすぎません。

mysql テーブルのいくつかのエントリをカウントする php 関数があります

$query = "SELECT COUNT(my_matches) FROM my_table";
$db->setQuery($query);
$value = $db->loadResult();

ここで、別のテーブルの別の行を $value で更新する必要があります

$query = "UPDATE my_table_reviews SET user_rating = (user_rating + '$value') WHERE listing_id = 77");
$db->setQuery($query);
$autorating = $db->loadResult();}

問題は次のとおりです: $value が変更された場合にのみ、my_table_review から行 user_rating を更新する方法は?

つまり... $value がこれに変更された場合 (2 番目のクエリ)。$value が安定している場合は、何もしません。

私は少し混乱しています...どんな助けも本当に感謝しています!

4

2 に答える 2

4

$value がこれに変更された場合 (2 番目のクエリ)。$value が安定している場合は、何もしません。

次に、これを試してください:

UPDATE my_table_reviews 
SET user_rating = (user_rating + '$value') 
WHERE listing_id = 77
-- update if only the user_rating had changed:
AND user_rating <> user_rating + $value 
于 2012-10-03T12:35:15.460 に答える
0

PHP 変数 ($value) が変更されたときに DB 更新をトリガーする場合は、その変数のすべての更新を抽象化する必要があります。例えば

class Example {
  var $value = 0;

  function var_set($v) {
    $this->value = $v;
  }

  function var_get() {
    return $this->value;
  }
}

...次に、クラスをインスタンス化し、変数にアクセスします。

$k = new Example();
$k->var_set(100);
print_r($k);

この抽象化を介してすべてのアクセサー/ミューテーター操作を行ったら、それが変更されているかどうかを確認し、それをトリガーとして使用するためのチェックを含めることができます。

  function var_set($v) {
    if ($v != $this->value) {
      $this->value = $v;
      // update the DB
      $query = "UPDATE my_table_reviews SET user_rating = (user_rating + '".$this->value."') WHERE listing_id = 77");
      // ...
    }
  }

一方、MySQL に更新があったかどうかを識別させ、異なる場合にのみ更新を適用させたい場合は、最初に提案した UPDATE ステートメントを実行するだけです。MySQL は変更があるかどうかをテストし、変更がある場合にのみ適用します。その変更を強制的に検出するロジックを追加しても、クエリの解決時間が遅くなるだけです。クエリをまったく実行する前に、PHP でテストする方がはるかに優れています。

于 2012-10-03T12:48:30.797 に答える