2013-07-02 6 views
0

다음과 같은 기록이있다 MySQL은 5.5.30, 테이블에, purchase_order_product (의 MyISAM)를 사용하여 :MySQL의 쿼리는 워크 벤치에서 작동하지만 코드 내

+----------+------------------+ 
| order_id | order_product_id | 
+----------+------------------+ 
|  98 |    1 | 
|  99 |    14 | 
|  99 |    15 | 
|  100 |    16 | 
|  100 |    17 | 
|  100 |    18 | 
|  101 |    19 | 
|  102 |    20 | 
+----------+------------------+ 

나는 MySQL의 워크 벤치에서 다음 쿼리를 실행하면 5.2.47 CE : 나는 다음과 같은 출력을 얻을

SELECT pop.order_id, pop.order_product_id, 
    @RUNNING:=IF(@PREVIOUS = pop.order_id, @RUNNING, 0) + 1 AS rownum, 
    @PREVIOUS:=pop.order_id as previd 
FROM purchase_order_product pop 
ORDER BY pop.order_id , pop.order_product_id ASC; 

는 :

+----------+------------------+--------+--------+ 
| order_id | order_product_id | rownum | previd | 
+----------+------------------+--------+--------+ 
|  98 |    1 |  1 |  98 | 
|  99 |    14 |  1 |  99 | 
|  99 |    15 |  2 |  99 | 
|  100 |    16 |  1 | 100 | 
|  100 |    17 |  2 | 100 | 
|  100 |    18 |  3 | 100 | 
|  101 |    19 |  1 | 101 | 
|  102 |    20 |  1 | 102 | 
+----------+------------------+--------+--------+ 

내 원하는 목표는 가치있는 것입니다 e의 rownum은 괜찮습니다. 지금까지 예상대로 ...

동일한 PHP 사용자가 동일한 데이터베이스에 대해 PHP 코드 또는 mysql 명령 줄에서 쿼리를 실행하면 다음 출력 :

+----------+------------------+--------+--------+ 
| order_id | order_product_id | rownum | previd | 
+----------+------------------+--------+--------+ 
|  98 |    1 |  1 |  98 | 
|  99 |    14 |  1 |  99 | 
|  99 |    15 |  1 |  99 | 
|  100 |    16 |  1 | 100 | 
|  100 |    17 |  1 | 100 | 
|  100 |    18 |  1 | 100 | 
|  101 |    19 |  1 | 101 | 
|  102 |    20 |  1 | 102 | 
+----------+------------------+--------+--------+ 

위에서 볼 수 있듯이, rownum은 항상 1입니다!

난 혼란스러운 문제에 대한 해결책을 광범위하게 검색했습니다. 아무 소용이 없습니다. 아무도 무슨 일이 벌어지고 있는지 모른다. 내가 뭔가 잘못하고 있는거야?

SET @RUNNING:=0; 
SET @PREVIOUS:=0; 

이 쿼리 이전과 같은 MySQL의 세션에서 수행해야합니다 :

답변

2

당신은 변수를 초기화해야합니다.

+0

대단히 감사합니다! 매력처럼 일했습니다! – jerahian

+0

@jerahian 다행히 도울 수있어 :) 응원의 친구 – Stephan