Mysql比较和命令

时间:2012-08-07 21:08:14

标签: mysql

我有像这样的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

感谢

4 个答案:

答案 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