2014-03-07 7 views
0

이하 쿼리 mysql 터미널, workbench 및 php에서 다른 방법으로 실행하십시오. mysql terminal과 workbench는 같은 결과를 주지만 php가 다른 결과를줍니다 (쿼리가 2 번 실행되는 것처럼 보입니다). 수량에서 1 항목을 줄이려고합니다. 하지만 PHP에서 (codeigniter, pdo connection) 양 (항상 언급 한 두 번)에서 2 항목을 뺍니다. 참고 :이 쿼리를 두 번 실행하지 않는다고 확신합니다.mysql 업데이트 쿼리를 두 번 실행하십시오.

UPDATE tbl_stock tsk, 
    (SELECT 
     tsk.id_stock, tsk.qty 
    FROM 
     tbl_store ts 
    inner join tbl_stock tsk ON ts.id_store = tsk.id_store 
    where 
     ts.id_physical_place = 2 
      and ts.store_status = 1 
      and tsk.stock_status = 1 
      and tsk.id_products = 796 
    limit 1) tmp 
SET 
    tsk.qty = (if(tmp.qty >= 1, 
     (tmp.qty - 1), 
     ifnull(tmp.qty, 0))) 
WHERE 
    tsk.id_stock = tmp.id_stock 

미리 감사드립니다.

업데이트 : 단말로부터

- 유사한>

쿼리 OK 1 열 영향, 2 경고 (0.03 초) 행 1 변경된 1 개 경고 : 0

주 (코드 1592) : BINLOG_FORMAT = STATEMENT 이후 명령문 형식을 사용하여 바이너리 로그에 작성된 안전하지 않은 명령문. 명령문은 LIMIT 절을 사용하기 때문에 안전하지 않습니다. 포함 된 행 집합을 예측할 수 없으므로 안전하지 않습니다. 참고 (코드 1592) : BINLOG_FORMAT = STATEMENT 이후 명령문 형식을 사용하여 바이너리 로그에 작성된 안전하지 않은 명령문. 행을 검색하는 순서가 기록 될 행 (있는 경우)을 결정하기 때문에 다른 테이블에서 선택한 후 자동 증가 열이있는 테이블에 작성하는 명령문은 안전하지 않습니다. 이 순서는 예측할 수 없으며 마스터와 슬레이브에서 다를 수 있습니다.

http://codetidy.com/8338/

+1

관련 PHP 코드가 표시되었습니다. 난 당신이 단순히 PHP 코드를 두 번 실행 기대합니다. – Kami

+0

는 PHP 문제가되어야합니다 – Aris

+0

PHP 코드는 어디에 있습니까? 그리고 PHP 코드가 없다면 PHP가 태그가 붙은 이유는 무엇입니까? – FreshPro

답변

1

아니오 아이디어. 하지만 URL 이상이 도움이

 $mod_select = $this->db->mod_select("SELECT 
     tsk.id_stock, tsk.qty 
    FROM 
     tbl_store ts 
    inner join tbl_stock tsk ON ts.id_store = tsk.id_store 
    where 
     ts.id_physical_place = " . $all_userdata['id_physical_place'] . " 
      and ts.store_status = 1 
      and tsk.stock_status = 1 
      and tsk.id_products = " . $value['itm'] . " limit 1"); 
     if ($mod_select[0]->qty >= $value['qty']) { 
      $this->db->update('tbl_stock', array('qty' => $mod_select[0]->qty - $value['qty']), array('id_stock' => $mod_select[0]->id_stock)); 
     } 

희망에서 언급 한 바와 같이이 별도로 실행하려고 제공합니다.

관련 문제