Bir DataGrid içinde bir veritabanından çıkarılan satır, tek tek gösteriliyor

1 Cevap php

Neredeyse 72.000 satır olan bir veritabanında bir tablo (oturum) var. Ben yardım php + mysql ile bu satırları ayıklamak ama sonuç HTTPService döndüğünde, ben tüm satırlar seferde DataGrid görünen başlamadan önce yaklaşık 32 saniye beklemek gerekiyor.

Question Is there any way by which DataGrid may start displaying data one by one while the application may extract next rows in parallel. Or that the DataGrid may show data in chunks of hundreds. Like when application starts, it may show first 400 enteries in DataGrid, then the next 400 hundred are extracted until all the 72,000 rows are extracted?

Ya da ben diğer yürütme paralel veritabanından sonraki veri ayıklamak için sorumlu olabilir iken bir konu datagrid verilerin görüntülenmesi için sorumlu olabilir, öyle ki diş içerebilir?

Teşekkürler her zaman olduğu gibi bir sürü adamlar.

<mx:HTTPService id="populateTable" url="request.php" method="POST"  resultFormat="e4x">
     <mx:request xmlns="">
        <getResult>table</getResult>
     </mx:request>
</mx:HTTPService>

PHP dosyasından kodu

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 Cevap

Uygulamayı yeniden tasarlama düşünün. Hiçbir aklı başında kullanıcı aynı anda veri bütün 72k görmem ihtiyaçtır.

  • Bir startIndexBu parametre kabul eder ve yerine * seçerek bu endeksi 100 satırları seçer böylece php komut dosyası değiştirin.
  • HTTPService değiştirilen startIndexBu değeri ile yeniden neden olur flex uygulaması Sonraki sayfa / Önceki sayfa düğmeleri ekleyin. DataGrids için lastResult HTTPService bölgesinin bağlama dataProvider.

Güncelleme:

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

Burada url kendisi endeksi eklenir ettik. Ayrıca HTTPService veri göndermek için bir request özelliğini kullanabilirsiniz.

Php, bunun değerine göre sadece 100 sorguları seçer böylece "SELECT * FROM session" sorgusunu değiştirmek $_GET["page"].