2014-09-25 130 views
0

我已經構建了一種機制來將查詢結果格式化爲具有特定模式的數組。 例如:PHP - 使用'陣列樣式'格式化查詢結果

<?php 

// Pattern 
$aPattern = array(
    'cust_id' => array(
     '@detail' => array(
      '@name' => '%{forename} {name}', 
      '@company' => 'company' 
     ), 
     '@orders_total' => 
      array('article' => 'qty') 
    ) 
); 

// Query 
$sQuery = "SELECT `cust`.*, `order`.`article`, SUM(`quantity`) AS qty 
      FROM `cust` LEFT JOIN `order` ON `cust`.`id` = `order`.`cust_id` 
      GROUP BY `cust`.`id`, `order`.`article`"; 

// Run query and set fetch mode 
$oStatement = Data::query($sQuery)->setFetchPattern($aPattern); 

// Fetch results 
$aRes = $oStatement->fetchAll(); 

它工作正常,但格式化大量的行(> 5000),當它需要太多的時間。 我一直在尋找可以更有效地完成工作而沒有成功的現有解決方案。 在發佈代碼以詢問是否有人可以幫助我改進它之前,請確定是否有人知道是否有PHP類或者類似已經執行此類工作的類?

在此先感謝,對不起任何StackOverflow誤用

+0

你可能會更好地切換到ORP,如Propel,或Doctrine或Eloquent – 2014-09-25 15:25:25

回答

0

最後我發現了這個問題。我爲結果集中找到的每一行運行fetch函數,並且每次將結果合併到全局結果數組時,顯然合併步驟花費的時間太長(resursive函數)。我只是修改了獲取函數,以便在遞歸函數中完成全局結果數組而不需要合併。現在它的工作速度很快:)