我有一个表,其中有 10 个结果。我们来说说以下几点:
id user number
-- ---- ------
1 user1 10
2 user2 5
3 user3 30
4 user4 45
5 user5 5
6 user6 22
7 user7 10
8 user8 40
9 user9 90
10 user10 65
我基本上想按“数字”值对它们进行排序。
所以它应该是这样的:
SORT id user number
---- -- ---- ------
1 2 user2 5
2 5 user5 5
3 1 user1 10
4 7 user7 10
5 6 user6 22
6 3 user3 30
7 8 user8 40
8 4 user4 45
9 10 user10 65
10 9 user9 90
排序后,我想从(例如)id = 6(其数字为22)的结果和其上方的其他2个结果(在本例中:id = 7和1)和其他2个结果中选择*在其下方(在本例中:id = 3 和 8)。
所以当我搜索 id = 6 时,返回结果应该是这样的:
SORT id user number
---- -- ---- ------
3 1 user1 10
4 7 user7 10
5 6 user6 22
6 3 user3 30
7 8 user8 40
如果我选择所有内容,我可以很容易地在服务器端执行此操作,但是这里会有大量数据,所以我宁愿只选择那些适合我的搜索的数据。
有什么方法可以用 MySQL 做到这一点吗?
这是获得您想要的东西的典型方法:
select t.*
from ((select t.*
from table t
where number <= (select number where id = 6 limit 1)
order by number desc
limit 3
) union all
(select t.*
from table t
where id > (select number where id = 6 limit 1)
order by number asc
limit 2
)
) t
order by number;
这假设当出现重复项时,您仍然需要 5 行输出。它还假设前两行或最后两行少于五行是可以的。上的索引id
将有助于此查询的性能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)