在DataGrid中逐个显示从数据库中提取的行

时间:2009-10-29 02:59:02

标签: php flex

我在数据库中有一个表(会话),它有近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;
}

1 个答案:

答案 0 :(得分:1)

考虑重新设计应用。没有理智的用户需要同时查看整个72K的数据。

  • 更改php脚本,使其接受startIndex参数并从该索引中选择100行,而不是选择*
  • 在flex应用中添加下一页/上一页按钮,使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个查询。