0

我有一个这样的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/ 使用“其中 x

谢谢

4

4 回答 4

1

根据您的意见,您应该使用

WHERE id > $minID ORDER BY ID ASC LIMIT 8
于 2012-08-07T21:43:02.367 回答
0

这很高兴,因为考虑一下 <= 的含义,您要求的或多或少。当您的意思是最接近时,您真正要的是什么?

于 2012-08-07T21:17:58.453 回答
0

您可能需要重新排序 where 子句以使其更易于阅读。根据查询中的逻辑,您需要 ID >= $maxID 的所有行。你确定这就是你要找的吗?

于 2012-08-07T21:13:44.527 回答
0

为您提供与过滤器匹配的WHERE所有行;LIMIT停止过滤并在 8 行后返回。由于该集合是按过滤条件降序排列的,因此它只会为您提供最大的 8 个 id,因为它们显然都大于$maxID.

您可能希望使用子查询来实现您的目标,例如像这样(未经测试):

SELECT * FROM $tbl_name ORDER BY id DESC LIMIT 8 
WHERE id IN (SELECT id FROM $tbl_name WHERE $maxID<=id);

此查询从所有元组包含小于或等于 id 的行的结果集中选择 8 个最大 id 行$maxID。这 8 行应该具有您想要的属性:最接近或等于$maxID.

于 2012-08-07T21:34:31.223 回答