Как оптимизировать запрос к бд?

Главные вкладки

Аватар пользователя Im Im 4 мая 2020 в 9:03

Привет!

Была задача выводить суммарное количество балов в профиле пользователя, на основе множество добавленных нод определенного типа с упоминанием этого пользователя. Вообще все реализовал, но есть загвоздка, в моем коде, используется два раза подключение к базе данных с подключением одних и тех же таблиц, интуитивно, я чувствую, что это можно оптимизировать до одного подключения, но практических знаний не хватает, подскажите, как можно объединить все в одно подключение к бд:

маленькая аннотация: филд колекшн, первое поле ссылка на профиль, вторая балл за событие.
Алгоритм: изначально есть id связи полей в филд коллекшн, по нему, я нахожу id пользователя(это первое выполнение db_select), а далее во втором поле филд колекшена я нахожу все баллы которые принадлежат этому id пользователя.

<?php
            $team_points 
0;
            
$entity_id $value['value']; // id field_collection айди филд колекшена, который связывает поля

            // найти id команды, 1 поле в field_collection
            

$query db_select('field_data_field_team_result''tr');
            
$query->fields('tr', array('field_team_result_target_id'));
            
$query->condition('tr.entity_id'$entity_id);
            
$pid $query->execute()->fetchAll();

            foreach (

$pid as $key => $value){
                
$pid $value->field_team_result_target_id;
            }

            

// нахожу все баллы одного пользователя по $pid который нашел выше
            
$query db_select('field_data_field_team_result''tr');
            
$query->innerJoin('field_data_field_point_result''pr''tr.entity_id = pr.entity_id');
            
$query->fields('pr', array('field_point_result_value'));
            
$query->condition('tr.field_team_result_target_id'$pid);
            
$points $query->execute()->fetchAll();

            foreach (

$points as $key3 => $value3){
                
$team_points += $value3->field_point_result_value;
            }
?>

Собственно вопрос - как спарить два db_select в один, то есть мне сначала нужно найти id пользователя, а потом, по id пользователя найти все id филд колекшена, и у же по ним найти все начисленные баллы.