我有这个查询:
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
我希望对于具有相同category_id 的记录,此 RANK 列会递增。当category_id增加时,我希望排名重置为1并再次开始递增。
当我从 TOAD 执行查询时,这非常有效,但当在我的 Web 应用程序中或从 phpMyAdmin 执行时,无论我做什么,RANK 始终为 1。
有人知道问题可能是什么吗?
谢谢!
最佳答案
您应该每次重置所有变量(@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;
关于php - mySql @变量在不同客户端的行为有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7674053/