0

I am trying to sort the table by the reputation and then select the position of the row [rank], it works fine, but I would like to print out 3 tables above and 3 tables below this rank row, but LIMIT rank,6 does not work :/ (Im sorry for that wrong formatted SQL :/) Would be thankful for every help :)

Here is what is working:

$query  = mysqli_query($con, "SET @rank=0");
$query  = mysqli_query($con, "
            SELECT 
               rank, 
               user_email, 
               reputation 
            FROM (
               SELECT 
                 @rank:=@rank+1 AS rank, 
                 user_email, 
                 reputation 
               FROM accounts, (SELECT @rank := 0) r 
               ORDER BY 
                 reputation DESC 
                 LIMIT 0,7
            ) t 
            WHERE 
               reputation >= '5' 
               OR reputation < '5'");

prints

[rank] [user_email]       [reputation]
1      mail1@gmail.com    20
2      test@test.com      15
3      mail2@gmail.com    10
4      othermail@gmail.com 5
5      hmmmmm@gmail.com    0
6      ouch@gmail.com      0
7      somemail@gmail.com  0
4

1 回答 1

1

我假设您正在寻找声誉为 5 的人,并希望该人加上高于和低于该人排名的 2。

在这种情况下,可能会进行选择,因为您基本上必须获得声誉为 5 的人的排名,然后将其加入到重复的相同选择中以找到任何一方排名的人:-

SELECT Sub1.rank, Sub1.user_email, Sub1.reputation 
FROM 
(
    SELECT @rank2:=@rank2+1 AS rank, user_email, reputation 
    FROM accounts, (SELECT @rank2 := 0) r 
    ORDER BY reputation DESC 
    LIMIT 0,7
) Sub1 
INNER JOIN
(
    SELECT rank, user_email, reputation 
    FROM 
    (
        SELECT @rank:=@rank+1 AS rank, user_email, reputation 
        FROM accounts, (SELECT @rank := 0) r 
        ORDER BY reputation DESC 
        LIMIT 0,7
    ) t 
    WHERE reputation = '5'
) Sub2
ON Sub1.rank BETWEEN (Sub2.rank - 2) AND (Sub2.rank + 2)
于 2013-07-05T11:53:06.717 回答