MYSQL在加载时显示结果

时间:2013-03-27 14:19:53

标签: php mysql

我有一个包含12000个产品的数据库。我有一个查询,可以在一个页面上显示大约3000个产品,并且需要一段时间才能显示。但是,在整个查询或循环结束后会显示数据。无论如何都要显示每个结果,因为它们被拉?以下是我的代码..

$result = mysql_query("SELECT title, model, description FROM products WHERE price > 500");
while($row = mysql_fetch_array($result)):
...
endwhile;

感谢任何帮助。感谢

3 个答案:

答案 0 :(得分:2)

它被称为db的延迟加载。

查看此article或此tutorial

如果我必须进行综合,基本上你LIMIT查询一定数量的记录,必须从db中取出。一旦达到某些条件(分页更改,向下滚动等),您将触发一个将检索其他记录的ajax调用,依此类推。

答案 1 :(得分:1)

不推荐使用mysql扩展,最好切换到mysqli或pdo。但是因为无论api /模块都是同样的问题,现在让我们坚持使用mysql_ * .... 调用mysql_query(...)时,只有在完整的结果集从MySQL服务器传输到php进程的内存后,函数才会返回。
请改用mysql_unbuffered_query(...)

<?php
$result = mysql_unbuffered_query("SELECT title, model, description FROM products WHERE price > 500");
while($row = mysql_fetch_array($result)):
...
  // output
  // maybe flush() or ob_flush() here...
endwhile;

解释了差异

您还必须牢记潜在的输出缓冲区:http://docs.php.net/flushhttp://docs.php.net/ob_flush

对于html客户端/浏览器,您必须将部分数据放入可在所有数据发送之前呈现的结构中。所以,例如不固定的表很可能是次优的。见例如https://en.wikipedia.org/wiki/Incremental_rendering

答案 2 :(得分:0)

有很多变量可以达到这样的效果。

首先,php设置应该允许你使用输出缓冲(看一下output_buffering参数,也许是implicit_flush)。之后你应该使用flush()和/或ob_flush()

你应该考虑的另一件事是,浏览器本身并不总是允许你使用输出缓冲,它被称为“问题”。

对于查询本身,您可能想尝试使用mysql_unbuffered_query(或更好的MySQLi / PDO等价物)。

总而言之,在我看来,实现这种效果的最佳方法是使用ajax数据轮询。