通过PHP更新$ value更改的Mysql行

时间:2012-10-03 12:30:26

标签: php mysql sql sql-update

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

我有一个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稳定,则什么也不做。

我有点困惑......任何帮助都会非常感激!

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分:0)

如果要在PHP变量更改($ value)时触发数据库更新,则需要抽象该变量的所有更新。 e.g。

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);

一旦你通过这个抽象获得了所有的访问者/ mutator操作,你可以包括一个检查,看看它是否被更改并将其用作触发器。

  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中进行测试。