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

Php 在DataGrid中逐个显示从数据库提取的行,php,apache-flex,Php,Apache Flex,我在数据库中有一个表(会话),它几乎有72000行。我使用帮助php+mysql提取这些行,但是当结果返回到HTTPService时,我需要等待大约32秒,然后所有行立即开始出现在DataGrid中 问题 在应用程序并行提取下一行数据时,DataGrid是否可以通过任何方式开始逐个显示数据。或者DataGrid可能以成百上千的块显示数据。和应用程序启动时一样,它可能会在DataGrid中显示前400个条目,然后提取下400个条目,直到提取完所有72000行 或者我可以使用线程,这样一个线程可能负

我在数据库中有一个表(会话),它几乎有72000行。我使用帮助php+mysql提取这些行,但是当结果返回到HTTPService时,我需要等待大约32秒,然后所有行立即开始出现在DataGrid中

问题 在应用程序并行提取下一行数据时,DataGrid是否可以通过任何方式开始逐个显示数据。或者DataGrid可能以成百上千的块显示数据。和应用程序启动时一样,它可能会在DataGrid中显示前400个条目,然后提取下400个条目,直到提取完所有72000行

或者我可以使用线程,这样一个线程可能负责在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;
}
函数populateTable()
{
$Result=mysql_查询(“从会话中选择*);
$Return=“”;
while($row=mysql\u fetch\u object($Result))
{
$Return.=''.$no.''。
“.$row->srcIP.”。
“.$row->dstIP.”。
“.$row->sPort”。
“.$row->dPort.”。
“.$row->sessionID.”。
“.$row->numberOfConnections.”。
"";
}
$Return.=“”;
//mysql_free_result($result);
回音$Return;
}

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

  • 更改php脚本,使其接受startIndex参数并从该索引中选择100行,而不是选择
    *
  • 在flex应用程序中添加下一页/上一页按钮,使
    HTTPService
    以更改的startIndex值重新发送。将
    HTTPService
    lastResult
    绑定到数据网格
    dataProvider
更新:

<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>

=总计/项目每页)
返回;
currentIndex++;
service.url=“request.php?page=“+currentIndex;
service.send();
}
私有函数prev():void
{
如果(currentIndex==0)
返回;
当前索引--;
service.url=“request.php?page”+currentIndex;
service.send();
}
]]>
在这里,我将索引附加到url本身。您也可以使用
HTTPService
的属性发送数据


在php中,更改查询
“SELECT*FROM session”
,使其仅根据
$\u GET[“page”]

的值选择100个查询如果您能够使用JS,则可以使用AJAX在php文件中返回数据时启动数据缓冲区,以预定的增量使用新内容重新加载DataGrid。为什么这个问题是社区wiki?仅供参考,社区维基问题中的投票没有任何信誉点,因此用户不太可能回答此类问题,一般性讨论/主观线索除外。如果你想吸引人,把你的问题标成cw不是个好主意。就个人而言,如果答案没有标记为CW,我可能会考虑花一些时间在答案中添加一些代码。声誉是我们在这里得到的激励,不要否认:)哦,不,阿马霍什。Franky我甚至不知道什么是社区维基:P我今天才注意到这个复选框,所以点击看看它做了什么。有什么方法可以将其从社区维基中删除吗?社区维基仅用于主观/争论性/稍微偏离主题的问题和没有明确答案的问题。我认为cw是不可逆转的。谢谢Amarghosh,但请不要因为我把这篇文章变成社区维基而惩罚我,因为我没有花时间在你的答案中添加一些代码:)非常感谢Amarghosh。现在,根据您的建议更新我的代码,尽管我并不总是事先知道从数据库访问表中的行数。14个问题和0个投票:您知道堆栈溢出是如何工作的吗?我想是的…通过你提到的链接。我想我只有回答一些问题才能获得选票。如果我不这样做,我的声誉就不会下降:)但我肯定会喜欢它上升。每当我遇到一些我知道答案的问题,我肯定会回答。你是对的:你回答问题,人们发现他们对你有帮助,投票支持你,你获得了代表。现在,有没有想过那些回答你问题的人是如何获得重复次数的。。。?