我无法在 Drupal 数据库中使用某些连接执行 SQL 查询

问题描述 投票:0回答:0

我在 Drupal 10 项目中工作,我正在使用以下代码进行动态查询:

$query = $this->entityTypeManager->getStorage('node')->getQuery();
$query->accessCheck(FALSE);
$query->condition('status', 1);
$query->condition('type', $node_bundle); 
$query->condition($taxonomy_field_name, $node_term_id);
$query->condition('nid', $node->id(), '<>');
$orGroup = $query->orConditionGroup();

foreach($recurrences as $recurrence){

    $date_start = $recurrence['value'];
    $date_end = $recurrence['end_value'];

    $andGroup = $query->andConditionGroup();

    $andGroup->condition($smart_date_field_name . '.end_value', $date_start, '>');
    $andGroup->condition($smart_date_field_name . '.value', $date_end, '<');

    $orGroup->condition($andGroup);

}

$query->condition($orGroup);
$nodes_id = $query->execute();

根据 $recurrences 的数量,查询有或多或少的连接。

使用 dpm($query->__toString()),我得到的查询是:

SELECT base_table.vid AS vid, base_table.nid AS nid
FROM
node base_table
INNER JOIN node_field_data node_field_data ON node_field_data.nid = base_table.nid
INNER JOIN node__field_reserva_sala_sala node__field_reserva_sala_sala ON node__field_reserva_sala_sala.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora ON node__field_reserva_sala_data_i_hora.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_2 ON node__field_reserva_sala_data_i_hora_2.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_3 ON node__field_reserva_sala_data_i_hora_3.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_4 ON node__field_reserva_sala_data_i_hora_4.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_5 ON node__field_reserva_sala_data_i_hora_5.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_6 ON node__field_reserva_sala_data_i_hora_6.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_7 ON node__field_reserva_sala_data_i_hora_7.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_8 ON node__field_reserva_sala_data_i_hora_8.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_9 ON node__field_reserva_sala_data_i_hora_9.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_10 ON node__field_reserva_sala_data_i_hora_10.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_11 ON node__field_reserva_sala_data_i_hora_11.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_12 ON node__field_reserva_sala_data_i_hora_12.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_13 ON node__field_reserva_sala_data_i_hora_13.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_14 ON node__field_reserva_sala_data_i_hora_14.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_15 ON node__field_reserva_sala_data_i_hora_15.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_16 ON node__field_reserva_sala_data_i_hora_16.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_17 ON node__field_reserva_sala_data_i_hora_17.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_18 ON node__field_reserva_sala_data_i_hora_18.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_19 ON node__field_reserva_sala_data_i_hora_19.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_20 ON node__field_reserva_sala_data_i_hora_20.entity_id = base_table.nid
LEFT JOIN node__field_reserva_sala_data_i_hora node__field_reserva_sala_data_i_hora_21 ON node__field_reserva_sala_data_i_hora_21.entity_id = base_table.nid
WHERE (node_field_data.status = '1') AND (node_field_data.type = 'reserva_sala') AND (node__field_reserva_sala_sala.field_reserva_sala_sala_target_id = '17') AND (node_field_data.nid <> '77') AND (((node__field_reserva_sala_data_i_hora.field_reserva_sala_data_i_hora_end_value > '1681284600') and (node__field_reserva_sala_data_i_hora.field_reserva_sala_data_i_hora_value < '1681290000')) or ((node__field_reserva_sala_data_i_hora_2.field_reserva_sala_data_i_hora_end_value > '1681889400') and (node__field_reserva_sala_data_i_hora_2.field_reserva_sala_data_i_hora_value < '1681894800')) or ((node__field_reserva_sala_data_i_hora_3.field_reserva_sala_data_i_hora_end_value > '1682494200') and (node__field_reserva_sala_data_i_hora_3.field_reserva_sala_data_i_hora_value < '1682499600')) or ((node__field_reserva_sala_data_i_hora_4.field_reserva_sala_data_i_hora_end_value > '1683099000') and (node__field_reserva_sala_data_i_hora_4.field_reserva_sala_data_i_hora_value < '1683104400')) or ((node__field_reserva_sala_data_i_hora_5.field_reserva_sala_data_i_hora_end_value > '1683703800') and (node__field_reserva_sala_data_i_hora_5.field_reserva_sala_data_i_hora_value < '1683709200')) or ((node__field_reserva_sala_data_i_hora_6.field_reserva_sala_data_i_hora_end_value > '1684308600') and (node__field_reserva_sala_data_i_hora_6.field_reserva_sala_data_i_hora_value < '1684314000')) or ((node__field_reserva_sala_data_i_hora_7.field_reserva_sala_data_i_hora_end_value > '1684913400') and (node__field_reserva_sala_data_i_hora_7.field_reserva_sala_data_i_hora_value < '1684918800')) or ((node__field_reserva_sala_data_i_hora_8.field_reserva_sala_data_i_hora_end_value > '1685518200') and (node__field_reserva_sala_data_i_hora_8.field_reserva_sala_data_i_hora_value < '1685523600')) or ((node__field_reserva_sala_data_i_hora_9.field_reserva_sala_data_i_hora_end_value > '1686123000') and (node__field_reserva_sala_data_i_hora_9.field_reserva_sala_data_i_hora_value < '1686128400')) or ((node__field_reserva_sala_data_i_hora_10.field_reserva_sala_data_i_hora_end_value > '1686727800') and (node__field_reserva_sala_data_i_hora_10.field_reserva_sala_data_i_hora_value < '1686733200')) or ((node__field_reserva_sala_data_i_hora_11.field_reserva_sala_data_i_hora_end_value > '1687332600') and (node__field_reserva_sala_data_i_hora_11.field_reserva_sala_data_i_hora_value < '1687338000')) or ((node__field_reserva_sala_data_i_hora_12.field_reserva_sala_data_i_hora_end_value > '1687937400') and (node__field_reserva_sala_data_i_hora_12.field_reserva_sala_data_i_hora_value < '1687942800')) or ((node__field_reserva_sala_data_i_hora_13.field_reserva_sala_data_i_hora_end_value > '1688542200') and (node__field_reserva_sala_data_i_hora_13.field_reserva_sala_data_i_hora_value < '1688547600')) or ((node__field_reserva_sala_data_i_hora_14.field_reserva_sala_data_i_hora_end_value > '1689147000') and (node__field_reserva_sala_data_i_hora_14.field_reserva_sala_data_i_hora_value < '1689152400')) or ((node__field_reserva_sala_data_i_hora_15.field_reserva_sala_data_i_hora_end_value > '1689751800') and (node__field_reserva_sala_data_i_hora_15.field_reserva_sala_data_i_hora_value < '1689757200')) or ((node__field_reserva_sala_data_i_hora_16.field_reserva_sala_data_i_hora_end_value > '1690356600') and (node__field_reserva_sala_data_i_hora_16.field_reserva_sala_data_i_hora_value < '1690362000')) or ((node__field_reserva_sala_data_i_hora_17.field_reserva_sala_data_i_hora_end_value > '1690961400') and (node__field_reserva_sala_data_i_hora_17.field_reserva_sala_data_i_hora_value < '1690966800')) or ((node__field_reserva_sala_data_i_hora_18.field_reserva_sala_data_i_hora_end_value > '1691566200') and (node__field_reserva_sala_data_i_hora_18.field_reserva_sala_data_i_hora_value < '1691571600')) or ((node__field_reserva_sala_data_i_hora_19.field_reserva_sala_data_i_hora_end_value > '1692171000') and (node__field_reserva_sala_data_i_hora_19.field_reserva_sala_data_i_hora_value < '1692176400')) or ((node__field_reserva_sala_data_i_hora_20.field_reserva_sala_data_i_hora_end_value > '1692775800') and (node__field_reserva_sala_data_i_hora_20.field_reserva_sala_data_i_hora_value < '1692781200')) or ((node__field_reserva_sala_data_i_hora_21.field_reserva_sala_data_i_hora_end_value > '1693380600') and (node__field_reserva_sala_data_i_hora_21.field_reserva_sala_data_i_hora_value < '1693386000')))

当我使用 $query->execute() 执行该查询时,数据库会占用所有 CPU 并且无法响应。

如果我用较少的连接执行相同的查询,它工作正常并且它检索值。

此外,如果我直接在mysql客户端上执行相同的查询,我也有同样的问题。

为什么会这样?问题出在哪里?

我的服务器规格

  • 操作系统:Debian 11
  • 网站:Apache/2.4.56
  • PHP:8.1.17
  • DB 版本:10.5.18-MariaDB-0+deb11u1(我也试过 MySQL Server)
  • 数据库引擎:InnoDB
  • 数据库大小:34 MB
  • Drupal:10.0.7
php mysql sql drupal mariadb
© www.soinside.com 2019 - 2024. All rights reserved.