2011-03-16 41 views
0

出下令我有一个简单的SQL查询是这样的:拉一个记录由现场

SELECT * FROM leaderboard WHERE UserId = '$sessfacebook'" 

这点我用户名,facebookid和分数值。我需要将此记录提取出来,但如果表格是按比分排序的,我需要找出记录所在的位置。希望这是有道理的。

回答

2

您可以使用另一个查询该

SELECT count(*) Position 
FROM leaderboard 
WHERE score >= (
    SELECT score 
    FROM leaderboard 
    WHERE UserId = '$sessfacebook') 

,你可以在一个子查询

插槽
SELECT *, (
    SELECT count(*) 
    FROM leaderboard b 
    WHERE b.score >= leaderboard.score) Position 
FROM leaderboard 
WHERE UserId = '$sessfacebook' 
+0

aha ok,那么我该如何获得该查询的位置......我如何将它分配给一个变量?对不起,我的SQL不是很棒。 – 2011-03-16 10:35:31

+0

@eld - 在这两个查询中,该列都被命名为“位置”。所以在PHP中,你会引用'$ pos = intval($ result ['position']);' – RichardTheKiwi 2011-03-16 10:36:55

+0

这太棒了。我实际上需要做<=而不是> =来获得我想要的,但它的工作。非常感谢 – 2011-03-16 11:03:26

1

你可以使用子查询分数越高,选择的记录数:

SELECT * 
,  (select count(*) from leaderboard lb2 where lb2.score > lb1.score) as Rank 
FROM leaderboard lb1 
WHERE UserId = '$sessfacebook'" 
1
SELECT * from (SELECT @ranknum := @ranknum + 1 AS rank, 
leaderboard.* FROM leaderboard , (SELECT @ranknum := 0) r order by score desc) 
as sortedboard where USERID = '$sessfacebook' limit 1; 

这将创建一个表格别名作为排行榜的排行榜,并从中获取所需的记录。 会为你工作,测试它。