PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP-MYSQL使用特定的行进行排序和限制,并选择上一行和下一行大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个名为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和一个较低的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,请注明来意。
标签: