我在MySQL数据库中有一个表,如下面的snap shot所示。
我需要根据rating_id
(主键)获取当前行号,并在每组产品中 。
目前,以下SQL从表中的所有行获取基于rating_id
的行号。
SELECT rownum
FROM (SELECT @rownum := @rownum + 1 AS rownum,
tbl.rating_id
FROM rating tbl,
(SELECT @rownum := 0)t
ORDER BY tbl.rating_id DESC)t
WHERE rating_id = ?
如何将此查询限制为特定产品组(prod_id
)?
换句话说,如何从一组特定产品(prod_id
)的行中获取行号?
答案 0 :(得分:2)
我猜你需要分别计算每组PROD_ID。在这种情况下,您应该添加一个用户定义的变量来存储以前的PROD_ID,并在新的PROD_ID组启动时重置@rownum
。
SELECT rownum,rating_id,prod_id
FROM (SELECT if(prod_id=@prev_prod,@rownum := @rownum + 1,@rownum:=1)
AS rownum,
tbl.rating_id,
tbl.prod_id,
@prev_prod:=prod_id
FROM rating tbl,
(SELECT @rownum := 1,
@prev_prod:=NULL)t
ORDER BY tbl.prod_id)t
WHERE rating_id = ?