所以我有这个游戏数据库,其中有几个带有字段、id、名称、积分的用户
我需要一个特定用户的排名表,其中可以看到其位置与积分的关系,表中有 8 个位置的空间,所以我正在寻找一种方法来执行以下操作:
如果我执行SELECT * FROM users WHERE id = {user_id} ORDER By points
选择此 id 之前的 4 个结果和之后的 3 个结果。有一个查询可以做到这一点吗?结果应如下所示:
---------------------
|id |name |points|
---------------------
| 52 |name1 | 10 |
---------------------
| 23 |name1 | 09 |
---------------------
| 93 |name1 | 08 |
---------------------
| 12 |name1 | 07 |
---------------------
| 43 |queried_name1 | 06 |
---------------------
| 67 |name1 | 05 |
---------------------
| 32 |name1 | 04 |
---------------------
| 91 |name1 | 03 |
---------------------
我试图通过软件来实现这一点,但是迭代所有结果的速度非常慢。感谢您的帮助!
最佳答案
对于上面的结果,我想说:
SELECT * FROM users WHERE points > (SELECT points FROM users WHERE id = {user_id}) ORDER By points ASC LIMIT 3;
对于以下结果:
SELECT * FROM users WHERE points < (SELECT points FROM users WHERE id = {user_id}) ORDER By points DESC LIMIT 4;
因此,有了一个大联盟,它会给出:
SELECT * FROM (SELECT * FROM users WHERE points > (SELECT points FROM users WHERE id = {user_id}) ORDER By points ASC LIMIT 3 ) a
UNION
SELECT * FROM users WHERE id = {user_id}
UNION
SELECT * FROM ( SELECT * FROM users WHERE points < (SELECT points FROM users WHERE id = {user_id}) ORDER By points DESC LIMIT 4 ) b
关于mysql - 使用 MySQL ORDER BY 选择范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10991099/