我正在订购这样的记录集:
SELECT * FROM leaderboards ORDER BY time ASC, percent DESC
假设我有与您相关的记录的 id,我怎样才能找出它在记录集中的位置,如上所示?
我知道如果它只是通过说“时间”来订购的,我可以
SELECT count from table where time < your_id
但是有 2 个 ORDER BY 让我感到困惑。
您可以使用变量来分配计数器:
SELECT *, @ctr := @ctr + 1 AS RowNumber
FROM leaderboards, (SELECT @ctr := 0) c
ORDER BY time ASC, percent DESC
这是做你想做的吗?
SELECT count(*)
FROM leaderboards lb cross join
(select * from leaderboards where id = MYID) theone
WHERE lb.time < theone.time or
(lb.time = theone.time and lb.percent >= theone.percent);
这假设 没有重复项time, percent
。