2

我需要一些帮助。请注意:以下代码行仅用于主要思想示例。

我有一个 php 函数来计算 mysql 表中的一些条目

$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 更改为这个(第二个查询)。如果 $value 稳定,什么也不做。

我有点困惑......任何帮助将不胜感激!

4

2 回答 2

4

如果 $value 更改为这个(第二个查询)。如果 $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) 时触发数据库更新,那么您需要抽象该变量的所有更新。例如

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 回答