我在数据库中有一个表(会话),它有近72,000行。我使用php + mysql帮助提取这些行但是当结果返回到HTTPService时,我需要等待大约32秒,然后所有行开始一次出现在DataGrid中。
问题 DataGrid可以通过哪种方式逐个开始显示数据,而应用程序可以并行提取下一行。或者DataGrid可以以数百个块的形式显示数据。就像应用程序启动时一样,它可能会在DataGrid中显示前400个进程,然后提取接下来的400个进程直到所有72,000行被提取出来?
或者我可以涉及线程,这样一个线程可能负责在datagrid中显示数据而另一个并行执行可能负责从数据库中提取下一个数据?
一如既往地感谢很多人。
<mx:HTTPService id="populateTable" url="request.php" method="POST" resultFormat="e4x">
<mx:request xmlns="">
<getResult>table</getResult>
</mx:request>
</mx:HTTPService>
来自PHP文件的代码
function populateTable()
{
$Result = mysql_query("SELECT * FROM session" );
$Return = "<Sessions>";
while ( $row = mysql_fetch_object( $Result ) )
{
$Return .= "<session><no>".$no."</no>" .
"<srcIP>".$row->srcIP."</srcIP>" .
"<dstIP>".$row->dstIP."</dstIP>" .
"<sPort>".$row->sPort."</sPort>" .
"<dPort>".$row->dPort."</dPort>" .
"<sessionID>".$row->sessionID."</sessionID>" .
"<numberOfConnections>".$row->numberOfConnections."</numberOfConnections>" .
"</session>";
}
$Return .= "</Sessions>";
// mysql_free_result( $Result );
echo $Return;
}
答案 0 :(得分:1)
考虑重新设计应用。没有理智的用户需要同时查看整个72K的数据。
*
。HTTPService
重新发送并更改startIndex值。将lastResult
的{{1}}绑定到DataGrids HTTPService
。 更新
dataProvider
这里我将索引附加到url本身。您还可以使用<mx:HTTPService id="service" resultFormat="e4x"/>
<mx:DataGrid dataProvider="{service.lastResult}">
<!-- columns -->
</mx:DataGrid>
<mx:Button label="Next" click="next()"/>
<mx:Button label="Prev" click="prev()"/>
<mx:Script>
<![CDATA[
private var currentIndex:Number = 0;
private var itemsPerPage:Number = 100;
private var total:Number = 72000;
private function next():void
{
if(currentIndex + 1 >= total/itemsPerPage)
return;
currentIndex++;
service.url = "request.php?page=" + currentIndex;
service.send();
}
private function prev():void
{
if(currentIndex == 0)
return;
currentIndex--;
service.url = "request.php?page" + currentIndex;
service.send();
}
]]>
</mx:Script>
的{{3}}属性发送数据。
在php中,更改查询HTTPService
,以便根据"SELECT * FROM session"
的值仅选择100个查询。