2012-10-03 2 views
2

도움이 필요합니다. 다음 코드 줄은 주요 아이디어 예입니다.

가 나는 문제가

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

$ 값이 다른 테이블의 다른 행을 업데이트 할 필요가

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

이제 MySQL의 테이블에서 일부 항목을 계산하기위한 PHP 함수를 가지고하는 방법 my_table_review에서 user_rating 행을 업데이트하는 경우에만 $ 값이 변경됩니까?

단어 ...이 경우 $ 값이 이렇게 변경됩니다 (두 번째 쿼리). $ value가 안정적이라면 아무 것도하지 않습니다.

저는 약간 혼란 스럽습니다. 어떤 도움이라도 정말 감사 할 것입니다!

답변

3

$ 값이 이렇게 변경된 경우 (두 번째 쿼리). $ 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

당신이 PHP 변수 변경 ($ 값) 다음 추상에 해당 변수의 모든 업데이트를 필요거야 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에서 테스트하는 것이 훨씬 좋습니다.

관련 문제