mysql - 使用 MySQL ORDER BY 选择范围

标签 mysql sql-order-by

所以我有这个游戏数据库,其中有几个带有字段、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/

相关文章:

mysql - 我想显示最高的号码。剧集数

php - Smarty 未在模板文件中显示结果

一台服务器上跨多个 InnoDB 数据库的 MySQL 事务

php - 插入批处理 codeigniter 后重定向不起作用

mysql - sql中的简单查询条件

mysql - MySQL 中的 ROLLUP 和 ORDER BY

sql - View 中可以有 OrderBy 吗?

c# - DataReader 关联在哪里?如何关闭它?

MySql 从两个表中选择数据,不使用 join,而是使用单个 where 条件

mysql排序表并获取行位置