我有一个名为 users 的简单表,其中包含以下数据:
id | hops
1 | 3
2 | 1
3 | 5
4 | 2
5 | 4
6 | 5
我想选择我指定的任何给定 id 的跃点数,并根据从最高到最低排序的跃点数选择下一个和上一个 id。
为了解释更多,我使用以下查询:
SELECT * FROM test WHERE id = 1
OR (id > 1 AND hops >= (SELECT hops FROM test WHERE id= 1) )
OR (id < 1 AND hops <= (SELECT hops FROM test WHERE id= 1) )
LIMIT 3
因此,在上面的查询中,我尝试获取id=1
具有相同或更高跳数的下一个 id,以及具有相同或更少跳数的前一个 id。
这是我得到的结果:
id | hops
1 | 3
3 | 5
5 | 4
正如你所看到的,它选择了 id=1 和两个更高的 id,尽管我只想要一个更高的 id 和一个更低的 id。因此,在这种情况下,结果应该是这样的:
id | hops
1 | 3
3 | 5
由于没有低于 1 的 id,所以没有低于 1 的 id 符合标准,只选择 1 个更高的 id。错误的结果是因为使用了 LIMIT 3 但我不能对每个条件都使用 LIMIT。所以根本不知道如何处理这个问题。
还有一个问题,使用子查询会
"SELECT hops FROM test WHERE id= 1"
大规模降低服务器速度吗?我听说使用子查询并不可取,但除了使用单独的查询外,没有其他方法可以得到这个数字。
谢谢