2011-10-06 63 views
2

我有這個疑問:MYSQL @變量來自不同客戶採取不同的

SELECT @ROWNUM := CASE WHEN @PREV_CAT_ID=T1.category_id THEN @ROWNUM+1 ELSE 1 END AS RANK, 
    @PREV_CAT_ID:=T1.category_id, 
    T1.* 
    FROM(d.category_id 
     FROM some_table d, 
     (SELECT @ROWNUM := 0)R 
     ORDER BY d.category_id 
    }T1 

我想這個RANK列遞增與同一CATEGORY_ID記錄。當category_id增加時,我想排名重置爲1並開始遞增。

當我從TOAD執行我的查詢時,但是當我的web應用程序或從phpMyAdmin執行時,RANK總是1,無論我做什麼,這都很好用。

有沒有人有任何想法,問題可能是什麼?

謝謝!

+0

看來,它正常工作時,MySQL連接建立與mysql_pconnect而不是mysql_connect。 – Goran

回答

3

您應該每次重置所有變量(@ROWNUM@PREV_CAT_ID)。試試這個查詢 -

SELECT 
    category_id, rank 
FROM (
    SELECT 
    category_id 
    , IF(@category_id = category_id, @num := @num + 1, @num := 1) AS rank 
    , @category_id := category_id 
    FROM some_table 
    CROSS JOIN (SELECT @num := 0, @category_id:= NULL) reset_all_vars 
    ORDER BY category_id 
) t; 
+0

+1非常好的代碼。 – Johan

+0

+1此解決方案更簡單,似乎正常工作(演示:http://sqlize.com/9Wh3WmRsUR)。 – mellamokb