假设我有一个包含10万个条目的庞大数据库,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>";
}问题
这个问题让我几乎要哭了,它需要很长时间才能加载,然后它会同时显示名字(记住100,000个条目的my_table ),有时它会突然显示一次,甚至有时会挂掉。
我的问题
我有什么办法叫它吗?这样它就可以用一个名字显示结果,比如流name1 (完成)、name2 (完成)、name3 (完成)、name4 (完成)、name5 (完成)、......etc不同时显示所有内容。
恐怕它需要一些ajax的想法,或者不知为什么我真的不知道,但这对我来说很重要,所以您的帮助对我非常有用。
发布于 2012-02-07 19:15:40
发布于 2012-02-07 19:23:55
您需要使用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但是,它的表在调用之间发生了更改,这可能会破坏顺序。
发布于 2012-02-07 19:08:43
每秒钟进行一次Ajax调用,以提取一行。创建一个计数器,在ajax运行之后,将其添加到计数器中。在运行ajax之前测试计数器,看看它是否在100,000,如果没有运行ajax,并将计数器发送到php文件,告诉它在sql语句中的WHERE id= $counter。
https://stackoverflow.com/questions/9182214
复制相似问题