我有这个sql
SET @rank:=0;
SELECT u.userid, a.referreid, c.avatar,c.avatarapproved, @rank:=@rank+1 AS rank , SUM( a.points ) as sum_points FROM
ade39_alpha_userpoints_details AS a, ade39_alpha_userpoints as u ,ade39_findme as c
WHERE (u.referreid = a.referreid) AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= a.insert_date
AND (u.userid= c.user_id) AND (u.userid >0)
GROUP BY a.referreid
ORDER BY sum_points DESC LIMIT 200
它工作正常但是在为行号添加“等级”之后它是“不工作”=&gt;&gt;输出为空。当我删除“@rank:= @ rank + 1 AS rank”时,它正在工作
答案 0 :(得分:0)
通常,您应该在select的字段列表中按所有未使用聚合函数的列进行分组。 MySQL能够很好地处理它,但它可能无法处理变量。 (请阅读手册MySQL Handling of GROUP BY部分下的更多内容。)
尝试将原始查询嵌入子查询中(但要注意顺序)。
SET @rank:=0;
SELECT @rank:=@rank+1 AS rank, * FROM (
SELECT u.userid, a.referreid, c.avatar,c.avatarapproved, SUM( a.points ) AS sum_points
FROM ade39_alpha_userpoints_details AS a,
ade39_alpha_userpoints AS u,
ade39_findme AS c
WHERE (u.referreid = a.referreid) AND
DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= a.insert_date AND
(u.userid= c.user_id) AND (u.userid >0)
GROUP BY a.referreid) T
ORDER BY sum_points DESC LIMIT 200