2012-02-07 66 views
2

让我们说我有一个巨大的10万项my_table (id,name) ,我想打电话给所有的entires的数据库中显示显示结果逐一

$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),有时突然显示一次或甚至某个时候挂断的huage量。

我的问题

有什么办法,我可以调用它,这样它显示我产生一个名字一个名字像流名1(已完成),NAME2(完成),NAME3(完成),NAME4 (完成),名称5(完成),......等不一次全部显示

恐怕它可能需要一些Ajax的想法或某种程度上,我真的不知道,但这对我很重要你的帮助对我来说非常有用。

+2

使用AJAX ....... – ThinkingMonkey 2012-02-07 19:05:57

+0

什么我害怕!导致我对阿贾克斯的知识为零:( – 2012-02-07 19:13:10

+0

检查我的答案。 – ThinkingMonkey 2012-02-07 19:16:53

回答

1

Ajax非常容易学习。

在这里你去:php_ajax_database

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

+0

当你发布它,我已经在那里阅读:)〜谢谢 – 2012-02-07 19:17:17

+0

@JackBen很好:) – ThinkingMonkey 2012-02-07 19:17:58

2

,从AJAX请求每一秒钟拉回来一排。做一个计数器,并在ajax运行后,一旦添加到柜台。运行AJAX,看看它为10万,如果不运行Ajax和柜台的PHP文件告诉它在SQL语句中

1

你可以使用AJAX蒙山LIMIT发送到WHERE id= $counter用于加载有限行之前测试的计数器。

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 

然而,该表的通话之间切换,这可能会破坏秩序。