2011-03-16 44 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; 

這將創建一個表格別名作爲排行榜的排行榜,並從中獲取所需的記錄。 會爲你工作,測試它。