SQL запрос

Как правильно составить запроc, и возможно ли это вообще за один раз получить небходимые данные, что бы заменить вот этот цикл:
$where = array('parent' => 628);
$resources = $modx->getCollection('modResource',$where);
$out = array();

foreach ($resources as $res) {
        $c = $modx->newQuery('modTemplateVarResource');
        $c->select( $modx->getSelectColumns('modTemplateVarResource','','',array('id','value')));
        $c->where(array(
            'tmplvarid' => 4,
            'value:Like' => '%'.$res->get('id').'%'
        ));
        $count = count($modx->getCollection('modTemplateVarResource', $c));

    $out[] = array(
        'uri' => $res->get('uri'), 
        'pagetitle' => $res->get('pagetitle'), 
        'count' => $count
        );
        
}
Виталий
21 декабря 2017, 08:12
modx.pro
952
0

Комментарии: 1

Андрей
21 декабря 2017, 13:23
1
0
Как-то так, не уверен, что LIKE написал правильно, но суть понятна думаю.

$c = $modx->newQuery('modResource');
$c->leftJoin('modTemplateVarResource', 'TV', 'TV.tmplvarid=4 AND TV.value LIKE %modResource.id%');
$c->where(array(
  'modResource.parent' => 628
));
$c->select(array(
  'modResource.uri as uri',
  'modResource.pagetitle as pagetitle',
  'TV.id as tv_id',
  'TV.value as tv_value'
));

if ($c->prepare() && $c->stmt->execute()) {
  $data = $c->stmt->fetchAll(PDO::FETCH_ASSOC);
}

if (!empty($data)) {
  $array = array();

  foreach ($data as $value) {
    // тут формируете нужный массив
  }

  print_r($array);
}
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1