最開始每發現,後來探索資料多了,php指令碼就會執行很長時間。
我是簡單的把所有資料擷取到,然後再去判斷符合尋找條件的,這樣確實很麻煩,但是因為條件有可能為空白,我感覺去對每個條件都判斷一下是否為空白?不為空白,就在sql語句中加上太麻煩,就沒那麼做。(這個有什麼號辦法也可以告訴我)
正常所有條件都為空白,那幾個if語句應該不會浪費多長時間,所以就是擷取資料庫那好2,3萬條資料,並遍曆這2,3萬條資料產生相應格式的字串(有html,txt等格式)費了很長時間,超過了max_execution_time =30。(我設定很長,等了2分鐘多,他也沒輸出來),超過了那個時間,就直接進入那個指令碼,一個白的介面。
所以我的主要問題:
怎麼樣把那資料匯出來,領導的建議是每次讀1000條,加個進度條,而網上查到的大部分都是固定的檔案,有路徑可以直接下的,我這個是產生的,本來是想用ajax(沒怎麼用過,就知道是非同步請求),然後看到有人說ajax不能下載檔案,smarty模板,html和php檔案分開的,找了很長時間也不知道怎麼辦,求助各位大神。。
回複討論(解決方案)
如果是我,也跟你們領導的想法一樣,分頁去產生。。。
過濾掉傳入條件的空項,可用 array_diff
如 $_POST = array_diff($_POST, array(''));
沒有了空項,組裝 sql 就簡單多了
雖然正常都為空白,但你不也是在迴圈中一一判別嗎?一萬條資料不就要判斷數萬次嗎?
如果沒有查詢條件,那又何必每次都去組裝呢?
在 select 指令中加上 INTO OUTFILE 子句不就直接輸出到檔案中去了嗎
過濾掉傳入條件的空項,可用 array_diff
如 $_POST = array_diff($_POST, array(''));
沒有了空項,組裝 sql 就簡單多了
雖然正常都為空白,但你不也是在迴圈中一一判別嗎?一萬條資料不就要判斷數萬次嗎?
如果沒有查詢條件,那又何必每次都去組裝呢?
在 select 指令中加上 INTO OUTFILE 子句不就直接輸出到檔案中去了嗎。if(!=null)才去迴圈判斷。
我是一次性全取出來了,因為還要產生相應格式的檔案,所以迴圈了那個數組,比如html格式 填個table,tr,td什麼的。
條件為空白的話,就不執行判斷是否合格那個了啊。不是
如果是我,也跟你們領導的想法一樣,分頁去產生。。。
怎麼分?他是一次性匯出所有條件相關的內容啊,產生一個臨時檔案,每次取1000條,放裡面,然後最後提供這個臨時檔案的下載,最後再把這個臨時檔案刪了?
好像是我自己的問題,是下載檔案最後的 echo 導致會很卡,跟資料庫關係不大。。
所以百度了下,在echo 字串的前面加入 ob_start(), 在這期間,echo 每條資料,最後flush(),ob_flush(), ob_end_clean()全部輸出來,暫時不會需要太久的時間。。