провёл для себя эксперимент выявить каким способом быстрее достать данные, например достать id=185 и его tv параметр price0
привожу листинги кодов
1)
$begin_time = time() - 1272000000 + floatval(microtime()); $q1 = $modx->newQuery('modTemplateVarResource'); $q1->where(array('tmplvarid' => '19')); $q1->select(array('modTemplateVarResource.*')); $q1->limit(1000); $q1->prepare(); $q1->stmt->execute(); $tvres = $q1->stmt->fetchAll(PDO::FETCH_ASSOC); //print_r($tvres); //-------resources------------ $q = $modx->newQuery('modResource'); $q->where(array( 'context_key' => 'web' )); $q->select(array( 'modResource.*' )); $q->limit(1000); $q->prepare(); $q->stmt->execute(); $result = $q->stmt->fetchAll(PDO::FETCH_ASSOC); $id = 185;//ресурс который ищем foreach($result as $res){ if($res[id] == $id ){ foreach($tvres as $tv){ if($tv[contentid] == $id){ echo $res[pagetitle] . "\n"; echo $tv[value] . "\n"; } } } } $end_time = time() - 1272000000 + floatval(microtime()) - $begin_time; echo $end_time;
время потраченое 0.055360972881317
второй листинг
2)
$begin_time = time() - 1272000000 + floatval(microtime()); $outHtmlAll=''; $modx->setLogLevel(3); $namespace = 'shopmodx'; if(!$response = $modx->runProcessor('web/getdata', array( "limit" => 1000 // Параметры ), array( 'processors_path' => $modx->getObject('modNamespace', $namespace)->getCorePath().'processors/', ))){ print "Не удалось выполнить процессор"; return; } $res0 = $response->getResponse(); //print_r($res0); $id = 185;//ресурс который ищем echo $res0[object][$id][pagetitle]. "\n"; echo $res0[object][$id][tvs][price0][value]. "\n"; $end_time = time() - 1272000000 + floatval(microtime()) - $begin_time; echo $end_time . "\n";
время потраченое 0.47229799628258