簡體   English   中英

一一顯示結果

[英]show results one by one

假設我有一個龐大的數據庫,其中包含100,000個條目my_table (id,name) ,我想調用所有要顯示的內容

$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),有時它突然顯示一次或什至掛斷了。

我的問題

有什么方法可以調用它,以便它顯示出按名稱顯示一個名稱的名稱,例如流式處理name1(完成),name2(完成),name3(完成),name4(完成),name5(完成),... ...等沒有一次全部顯示

恐怕它可能需要一些ajax的想法,或者我不知道的某種方式,但這對我很重要,因此您的幫助對我非常有用。

您需要使用AJAX

MySQL支持服務器端游標,您可以通過調用attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE)來啟用它。 但是,要使其正常工作,您需要在應用程序服務器上運行PHP ,該服務器將保持AJAX調用之間的連接。 如果可以這樣做,則使查詢成為准備好的語句,在AJAX調用中傳遞會話令牌以標識查詢語句,並且每次收到AJAX請求時只需獲取1000行(或其他任何行)。

如果您不能這樣做,則可以提供頁碼並將其傳遞給LIMIT子句:

SELECT  *
FROM    mytable
ORDER BY
        id
LIMIT   $pageSize
OFFSET  $pageNum * $pageSize

但是,在兩次調用之間更改了表,這可能會破壞順序。

每秒進行一次Ajax調用以退回一行。 創建一個計數器,並在ajax運行一次后添加到計數器。 在運行ajax之前測試計數器,以查看其是否在100,000(如果未運行ajax)並將其發送到php文件,並在sql語句中將其告知WHERE id= $counter

您可以使用AJAX連LIMIT來加載有限的行。

Ajax非常易於學習。

您可以在這里: php_ajax_database

您可以使用LIMIT來限制要獲取的行數。 每當您要獲取下一組行時,在客戶端維護一個計數器,將其繼續發送。 並根據計數器獲取行。

不要立即獲取完整數據,而是要定義返回結果的限制(例如100或您想要的任何內容),並提供分頁,以便您可以在獲取數據時繼續下一個下一步,同時保留下一個可能數據的緩存。

請查看以下鏈接以獲得更多許可。

http://www.tuxradar.com/practicalphp/9/4/9

使用MySQL和PHP有效處理大量數據

使用MySQL從數據庫表中選擇大量行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM