大佬教程收集整理的这篇文章主要介绍了PHP-MYSQL使用特定的行进行排序和限制,并选择上一行和下一行,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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和一个较低的ID,但它选择了id = 1和两个较高的id.因此,在这种情况下,结果应该是这样的:
id | hops
1 | 3
3 | 5
由于没有比1低的ID,因此没有更低的ID符合条件,并且仅选择1个更高的ID.错误的结果是因为使用了LIMIT 3,但我不能对每个条件都使用LIMIT.所以根本不知道该如何处理.
还有另一个问题,会使用子查询
“ SELECT跳自测试WHERE id = 1”
大规模降低服务器速度?我听说使用子查询不是最好的选择,但是除了使用单独的查询之外,没有其他方法可以获取此数字.
谢谢
解决方法:
在这里,您可以根据自己的喜好通过ID更改顺序…您没有说是要获得最接近的跃点数还是最接近的ID,而只需增加或降低
SELECT * FROM test
WHERE id IN (1,(
SELECT id FROM test WHERE id > 1 AND hops >= (
SELECT hops FROM test WHERE id = 1
) ORDER BY id LIMIT 1
), (
SELECT id FROM test WHERE id < 1 AND hops <= (
SELECT hops FROM test WHERE id = 1
) ORDER BY id DESC LIMIT 1
))
以上是大佬教程为你收集整理的PHP-MYSQL使用特定的行进行排序和限制,并选择上一行和下一行全部内容,希望文章能够帮你解决PHP-MYSQL使用特定的行进行排序和限制,并选择上一行和下一行所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。