我有一个包含(简化形式)以下字段的 1 个表数据库:user_id(INT)、ref_id(INT)、points(INT)、pointsgiven(BOOL/TINY_INT)
我想要一个查询,它返回我根据点指定的 user_id 的 RANK,因为 pointsgiven 是真的。更重要的是,我需要包括领带。如果我想使用以下查询,我可以得到所有等级的结果集
SELECT
user_id, ref_id, points, pointsgiven,
CASE
WHEN @points = COALESCE(points, 0) THEN @rownum
ELSE @rownum := @rownum + 1
END AS rank,
@points := COALESCE(points, 0)
FROM users CT
JOIN
(
SELECT @rownum := 0, @points := NULL
) r
WHERE pointsgiven=TRUE ORDER BY points DESC
因此,基于此,我认为我可以将其用作子查询来获取某个 user_id,如下所示:
select * from
(
SELECT
user_id, ref_id, points, pointsgiven,
CASE
WHEN @points = COALESCE(points, 0) THEN @rownum
ELSE @rownum := @rownum + 1
END AS rank,
@points := COALESCE(points, 0)
FROM users CT
JOIN
(
SELECT @rownum := 0, @points := NULL
) r
WHERE pointsgiven=TRUE ORDER BY points DESC
) as derived WHERE user_id = 15
但这会返回 [BLOB - 1 B] 作为正确 user_id 上的排名。我在这里做错了什么?