我有像这样的SQL查询
SELECT * FROM $tbl_name WHERE $maxID<=id ORDER BY id DESC LIMIT 8
这里我想要检索最接近id为$ maxID的行,但是它会检索具有最大id的前8行,当我删除“ORDER BY id DESC”时,它会在其他方面工作,它会检索最接近的行。但是我不明白“ORDER BY id DESC”的效果。 它应该只对结果进行排序,不应该影响检索结果。另一个问题是,此查询是否检索大于$ maxID的所有行?如果是这样,效率不方便。我不想要检索所有行。我想只检索8个元素。性能对我的系统很重要。在此网站中:http://www.xarg.org/2011/10/optimized-pagination-using-mysql/使用“where x
感谢
答案 0 :(得分:1)
根据您的评论,您应该使用
WHERE id > $minID ORDER BY ID ASC LIMIT 8
答案 1 :(得分:0)
您可能需要重新排序where子句以使其更易于阅读。根据查询中的逻辑,您需要ID> gt; = $ maxID的所有行。你确定那是你想要的吗?
答案 2 :(得分:0)
这很有意思,因为想想&lt; =意味着什么,你的要求更低或更高。如果你的意思是最接近的,你真正要求的是什么?
答案 3 :(得分:0)
WHERE
为您提供与过滤器匹配的所有行; LIMIT
停止过滤并在8行后返回。由于过滤器标准按降序排序,因此它只会给你最大的8个ID,因为它们显然都大于$maxID
。
您可能希望使用subquery来实现目标,例如这样的事情(未经测试):
SELECT * FROM $tbl_name ORDER BY id DESC LIMIT 8
WHERE id IN (SELECT id FROM $tbl_name WHERE $maxID<=id);
此查询从行结果集中选择8个最大的id行,其中所有元组的id都小于或等于$maxID
。这8行应具有您想要的属性:最接近或等于$maxID
。