我需要一些帮助。请注意:下面的代码行仅用于主要想法示例。
我有一个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稳定,则什么也不做。
我有点困惑......任何帮助都会非常感激!
答案 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中进行测试。