[英]Display results from one table as link to show results to another table?
[英]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或您想要的任何內容),並提供分頁,以便您可以在獲取數據時繼續下一個下一步,同時保留下一個可能數據的緩存。
請查看以下鏈接以獲得更多許可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.