我正在浏览Stack Overflow试图找到如何使用while循环限制SQL查询,我遇到了这段代码。
$count = 0;
while ($count < 4 && $info = mysql_fetch_assoc($result)) {
//stuff
$count++;
}
问题1:此代码与使用SQL LIMIT
子句有什么区别?
问题2:为什么有人想要使用此代码,而不是使用LIMIT
?
答案 0 :(得分:1)
使用此代码,MySQL服务器会将所有结果发送到客户端,但客户端会忽略第4行之后的所有内容。因此,服务器必须做更多工作,并且将在客户端和服务器之间使用更多带宽。
他们可能希望使用mysql_num_rows()
来查找已选择的总行数,即使他们只想显示第一行。但是,MySQL提供了一种方法来实现{{1您可以将LIMIT
选项放在SQL_CALC_FOUND_ROWS
子句中,然后使用SELECT
来获取总行数。所以没有充分的理由,除非他们不了解这个功能。
答案 1 :(得分:0)
每个@Barmar都说是对的。跟随这样的代码会导致很多问题,因为结果集开始增长。让数据库尽其所能,让它提供您想要/需要的结果限制。试想一下当你在命令行客户端做一个没有LIMIT子句的SELECT时会发生什么,那里有成千上万行...它只是继续下去。
还有一件事,我不建议使用mysql_num_rows()作为其弃用的函数。不妨与mysqli或PDO一起去。