Я создал механизм для форматирования результатов запроса в виде массива с определенным шаблоном.
Например :
<?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
Наконец я нашел проблему. Я запускал функцию выборки для каждой строки, найденной в наборе результатов, и каждый раз, когда я сливал результат с глобальным массивом результатов, очевидно, что этап объединения занимал слишком много времени (функция восстановления). Я просто изменил функцию извлечения, чтобы глобальный результирующий массив просто завершался в рекурсивной функции без необходимости слияния. Теперь работает быстро 🙂
Других решений пока нет …