逐个显示结果

时间:2012-02-07 19:02:47

标签: php mysql ajax

假设我有一个包含100,000个条目的庞大数据库my_table (id,name) 我想打电话给所有的礼物

$conn = mysql_connect('localhost','USER','PASS') or die(mysql_error());
mysql_select_db('my_table',$conn);

$sql = "SELECT * from my_table";
$result = mysql_query($sql,$conn);

while ($row = mysql_fetch_array($result)){

$name = $row['name'];
$id = $row['id'];

echo $name;
echo "<br>(done)<br>";

}

问题

让我几乎要哭的问题,加载需要很长时间,然后它会同时显示名称(记住my_table的100,000个条目),有时它会突然显示一次或甚至某些时候挂断的数量。

我的问题

有什么方法可以调用它,以便它显示结果一个名称,一个名称,如流名称1(完成),名称2(完成),名称3(完成),名称4(完成),名称5(完成), ......等没有立刻显示出来

我担心它可能需要一些ajax的想法,或者我真的不知道但这对我很重要,所以你的帮助对我来说非常有用。

5 个答案:

答案 0 :(得分:3)

您需要使用AJAX

MySQL支持通过调用attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE)启用的服务器端游标。但是,为此,您需要在应用程序服务器上运行PHP,这将保持AJAX调用之间的连接。如果您可以这样做,那么使您的查询成为预准备语句,在AJAX调用中传递会话令牌以识别查询语句,并在每次收到1000请求时获取AJAX(或其他)行

如果您不能这样做,那么您可以提供页码并将其传递给LIMIT子句:

SELECT  *
FROM    mytable
ORDER BY
        id
LIMIT   $pageSize
OFFSET  $pageNum * $pageSize

但是,在调用之间更改了表,这可能会破坏顺序。

答案 1 :(得分:2)

每秒进行一次Ajax调用以拉回一行。制作一个计数器,并在ajax运行一次后添加到计数器。在运行ajax之前测试计数器以查看它是否为100,000,如果没有运行ajax并将计数器发送到php文件,告诉它在sql语句中WHERE id= $counter

答案 2 :(得分:1)

您可以将AJAX与LIMIT一起用于加载有限的行。

答案 3 :(得分:1)

Ajax非常容易学习。

在这里:php_ajax_database

您可以使用LIMIT来限制要获取的行数。 在客户端维护一个计数器,只要你想获取下一组行,就不断发送它。并根据计数器获取行。

答案 4 :(得分:0)

不要一次获取完整数据,而是定义返回结果的限制,例如100或者你喜欢什么,并提供分页以便下次接下来,同时获取数据保留下一个可能的缓存数据

请查看以下链接以获取更多许可。

http://www.tuxradar.com/practicalphp/9/4/9

Processing a large amount of data efficiently with MySQL and PHP

Selecting large amount of rows from database table with MySQL