2012-10-03 35 views
2

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

我有一个PHP函数在一个MySQL表来算一些条目现在

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

,我需要更新另一个表的另一行以$值

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

的问题是:如何从my_table_review更新行user_rating只有当$ value更改时?

换句话说......如果$ value更改为这样(第二个查询)。如果$ value稳定,则不做任何事情。

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

回答

3

如果$ 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 
0

如果要触发DB更新时,PHP变量的变化($值),那么你就需要抽象该变量的所有更新。例如

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进行测试要好得多。