user_id(INT)、ref_id(INT)、points(INT)、pointsgiven(BOOL/TINY_INT) の 1 つのテーブル データベースを (簡略化した形で) 持っています。
pointsgiven が true の場合、ポイントに基づいて指定した user_id の RANK を返すクエリが必要です。キッカーは、ネクタイが含まれている必要があります。次のクエリで必要に応じて、すべてのランクの結果セットを取得できます
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
しかし、これは正しい user_id のランクとして [BLOB - 1 B] を返します。ここで何が間違っていますか?