也許我錯過了一些簡單的東西......或者我剛剛在這上面編碼了這麼久,我看不到過去我的問題,但是使用CakePHP(1.3)並做一個選擇(MySQL)應該能夠返回結果,即使有,例如,2000條記錄......對不對?在CakePHP和MySQL中返回很多行
$options = array(
'conditions' => array(
'Lead.campaign_id' => $campaign['Campaign']['id']
),
'recursive' => -1,
'order' => 'Lead.goal DESC',
'contain' => false,
);
$leads = $this->Lead->find('all',$options);
然而,這個查詢給我一個死亡白屏(與define('LOG_ERROR', 2);
設置)。
如果我在$options
數組中添加一個'limit' => 300,
(或類似的數字,但不必精確地爲300),那麼它將取得結果,因此我知道查詢本身不是問題。
此外,我試圖通過使用$options
數組中的'fields'
參數來限制返回的列......甚至告訴它只返回1個字段,但這也不起作用。
我也通過
$log = $this->Lead->getDataSource()->getLog(false, false);
debug($log);
當然呼應的是,它使用的SQL語句,我不得不把'limit'
在爲實現這一目標顯示(否則我剛剛得到死亡的白色屏幕) 。然後,我將這個查詢(沒有限制)複製/粘貼到phpMyAdmin中,並且它返回記錄就好了(即使'show me 1,000 rows'也是如此)。這樣做導致我相信系統可以處理查詢&輸出,但也許我做了一個假設,我不應該。
我試圖獲取所有行而不分頁記錄的原因是因爲我需要將它們輸出到一個csv文件供用戶下載(這部分已經在工作... 當查詢工作正常)。
有人向我建議說,這可能是一個超時問題,我應該提出這個問題,但這對我來說似乎是一個破解,必須有更好的解決方案。
由於我正在下載一個csv文件,也許有一種方法可以將查詢流式傳輸到一個文件,然後下載?或者甚至有更好的解決方案?
打開調試開關,它會讓您知道內存和超時錯誤。這很可能是您的查詢需要優化(在您的查詢中使用'EXPLAIN'),但通過2K行進行排序可能會很昂貴。 – jeremyharris
我沒有在cakephp查詢的上下文中使用'explain',但是當我向'$ options'添加'limit'時,我看到了確切的'select'輸出。你說得對,2k行的處理很多,但我認爲它確實不會那麼糟糕。正如我剛纔在下面的評論中指出的,也許我需要弄清楚如何運行後臺進程來將記錄寫入文件呢?我以前沒有這樣做過。 –