2011-05-18 52 views
0

我有一個查詢返回了很多結果,我的代碼內存不足,試圖解析結果......我如何在CakePHP中運行查詢並獲取正常結果?CakePHP解析查詢結果替代

通過解析它我的意思....

SELECT table1.*, table2.* FROM table1 INNER JOIN table2 ON table1.id = table2.table1_id

通過上面的查詢,它會返回....

array(
    0 => array(
     'table1' => array(
      'field1' => value, 
      'field2' => value 
     ), 
     'table2' => array(
      'field1' => value, 
      'field2' => value 
     ) 
    ) 
) 

當解析這些結果納入嵌套數組,是當內存不足時......我該如何避免這種情況?

我現在無法比CakePHP更討厭CakePHP: - \如果文檔是體面的,那將是一回事,但它不是體面的,它的功能很煩人。

+0

「正常結果」是什麼意思? – dhofstet 2011-05-18 15:23:33

+0

「一大堆」是什麼意思翻譯成數字? 1千字節? 5? 10兆字節? 1千兆字節?解析 - 如何?使用json_encode嘗試創建XML或HTML到一個對象中?您*具有*具體。 – 2011-05-18 15:54:43

+0

如果查詢返回的結果太多,是否應該修改查詢以僅返回所需內容? – JJJ 2011-05-18 16:01:43

回答

0

你可以這樣做:

$list = $this->AnyModel->query("SELECT * FROM big_table"); 

,但我不認爲這將解決您的問題,因爲如果你有,對於爲例,10millon行.. PHP將無法管理10millon值的數組.. 。

,但你可能需要閱讀這兩個環節來改變execution timememory limit ..你也可以改變他們對你的php.ini

祝您好運!

EDITED 嗯感謝你的問題,我已經學到了一些東西:所有的頁第一,大家都同意,因爲蛋糕將執行查詢並試圖存儲在一個數組,但PHP的結果是您收到的錯誤不支持數組那麼大,所以它耗盡內存和崩潰..我從來沒有使用過經典的mysql_query()(我更喜歡PDO),但在閱讀文檔後,似乎mysql_query將結果存儲在resource之內,它不會在內存中加載結果,並且允許您循環結果(如通過大文件循環)。所以,現在我看到的區別...和你的問題其實是,這一個:

Can I stop CakePHP fetching all rows for a query?

=)我明白蛋糕你的無奈,有時我也感到失望,它(你能相信沒有簡單用HAVING子句執行查詢的方法?? u_U)

乾杯!

+0

我添加了更多的細節... – Webnet 2011-05-18 18:47:36

+0

@Webnet - 正如我所說,它與cakephp沒有任何關係..問題是你有太多的查詢結果記錄和數組的大小是受限於內存允許的PHP ...但你有沒有試過這段代碼? – pleasedontbelong 2011-05-18 20:56:54

+0

它與CakePHP有關,CakePHP將這些結果處理成數組。我不想那樣,我想運行一個簡單的循環。處理這些行不會是mysql_query()的問題,這是數組處理問題。 – Webnet 2011-05-19 01:01:48

0

您應該限制從行查詢返回(如500行),並允許用戶所需要的(每次接下來的500行)時,以獲取更多的行。你可以用分頁組件和一點AJAX做得很好。