превратить запрос представлений в запрос mysql - PullRequest
0 голосов
/ 04 мая 2020

используя модуль views raw sql, я получил одно представление, которое у меня есть: но как это преобразовать, чтобы иметь возможность получить результат, когда я запускаю запрос в mysql напрямую? что означает {}? я не понимаю, как запрос должен быть изменен, чтобы иметь возможность получить результаты в mysql. Моя конечная цель состоит в том, чтобы заменить все левые объединения на внутренние объединения, чтобы набрать скорость, как описано здесь: https://www.silviogutierrez.com/blog/optimizing-drupal-views-right-way/, поэтому у меня есть два вопроса, как я должен изменить приведенный ниже запрос sql для запуска в mysql, и как я могу сделать все левые соединения ниже внутренних объединений:

SELECT  node.nid AS nid, node.language AS node_language, node_field_data_field_title.title AS node_field_data_field_title_title,
        node.nid AS node_nid, 'node' AS field_data_field_circ_type_node_entity_type,
        'node' AS field_data_field_circ_period_node_entity_type,
        'node' AS field_data_field_active_node_entity_type, 'node' AS field_data_field_onhold_node_entity_type,
        'node' AS field_data_field_item_node_entity_type, 'node' AS field_data_field_patron_node_entity_type,
        'node' AS field_data_field_due_date_node_entity_typeFROM {node} nodeLEFT
    JOIN  {field_data_field_item} field_data_field_item  ON node.nid = field_data_field_item.entity_id
      AND  (field_data_field_item.entity_type = 'node'
              AND  field_data_field_item.deleted = '0'
           )LEFT
    JOIN  {node} node_field_data_field_item  ON field_data_field_item.field_item_nid = node_field_data_field_item.nidLEFT
    JOIN  {field_data_field_patron} field_data_field_patron  ON node.nid = field_data_field_patron.entity_id
      AND  (field_data_field_patron.entity_type = 'node'
              AND  field_data_field_patron.deleted = '0'
           )LEFT
    JOIN  {node} node_field_data_field_patron  ON field_data_field_patron.field_patron_nid = node_field_data_field_patron.nidLEFT
    JOIN  {og_membership} og_membership_node  ON node.nid = og_membership_node.etid
      AND  (og_membership_node.entity_type = 'node')LEFT
    JOIN  {field_data_field_title} node_field_data_field_item__field_data_field_title  ON node_field_data_field_item.nid = node_field_data_field_item__field_data_field_title.entity_id
      AND  (node_field_data_field_item__field_data_field_title.entity_type = 'node'
              AND  node_field_data_field_item__field_data_field_title.deleted = '0'
           )LEFT
    JOIN  {node} node_field_data_field_title  ON node_field_data_field_item__field_data_field_title.field_title_nid = node_field_data_field_title.nidWHERE (( (og_membership_node.gid = '672621' ) )AND(( (node.status = '1')
                              AND  (node.type IN ('circulation')) ))
                          )ORDER BY node_nid DESC LIMIT 20 OFFSET 0

1 Ответ

1 голос
/ 04 мая 2020

Все, что вам нужно, описано в документации Drupal: https://www.drupal.org/docs/7/api/database-api/static-queries

Пример с этого сайта:

$result = db_query("SELECT nid, title FROM {node} WHERE created > :created", array(
  ':created' => REQUEST_TIME - 3600,
));

{узел} в этом примере преобразуется в реальное имя таблицы, например, путем добавления суффиксов. Те же правила применяются к другим элементам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...