2013-07-02 137 views
0

使用MySQL 30年5月5日,爲一個表,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工作臺下面的查詢47年2月5日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 | 
+----------+------------------+--------+--------+ 

我的預期目標是VALU rownum,這是很好的,如預期到目前爲止......

然而,當我從我的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!

我有廣泛的搜索解決這個令人困惑的問題,無濟於事。有誰知道可能會發生什麼?難道我做錯了什麼?

回答

2

需要初始化變量:

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

這必須在查詢之前,並在同MySQL的會話來完成。

+0

非常感謝!像魅力一樣工作! – jerahian

+0

@jerahian很高興我可以幫助:)歡呼的隊友 – Stephan