Выполнение Sql-запроса в drupal


У меня есть SQL-запрос, и я хочу выполнить его в Drupal. Мой SQL-запрос выглядит так.

select cat.tid as cat_tid, cat.name as cat_name, cat_parent.parent as cat_parent_tid, 
count(deals.nid) as no_of_deals
from 
taxonomy_term_data as cat

left outer join taxonomy_term_hierarchy as cat_parent on cat_parent.tid=cat.tid

left outer join field_revision_field_categories as store_categories on 
store_categories.field_categories_tid=cat.tid

left outer join field_revision_field_store as deal_stores on field_store_nid=store_categories.entity_id

left outer join (select * from node where type='deal' and status=1) as deals on nid=deal_stores.entity_id

where cat.vid=5 

group by cat.tid, cat.name, cat_parent.parent

Я преобразовал этот запрос с помощью этого модуля https://drupal.org/project/query_coder

И получил полученный запрос в виде

$query = db_select('taxonomy_term_data', 'cat');

$query->addExpression('count(deals.nid)', 'no_of_deals');

$query->fields('cat', array('tid', 'name'));

$query->fields('cat_parent', array('parent'));

$query->leftJoin('taxonomy_term_hierarchy', 'cat_parent', 'cat_parent.tid = cat.tid');

$query->leftJoin('field_revision_field_categories', 'store_categories', 'store_categories.field_categories_tid = cat.tid');

$query->leftJoin('field_revision_field_store', 'deal_stores', 'field_store_nid = store_categories.entity_id');

$query->leftJoin('', 'deals', 'nid = deal_stores.entity_id');

$query->condition('cat.vid', 5);

$query->groupBy('cat.tid');

$query->groupBy('cat.name');

$query->groupBy('cat_parent.parent');

$result = $query->execute();

Теперь, как я могу выполнить этот запрос в drupal, я попытался импортировать этот запрос в представлениях 3, но получил неожиданную ошибку, Также я попытался добавить этот запрос в блок, но снова получил ту же ошибку. Я также создал пользовательский блок в пользовательском модуле, который тоже не работал. Пожалуйста, помогите мне, как я могу выполнить этот запрос. Ответ будет очень признателен.

Author: Mudasir, 2013-12-18

3 answers

Вам лучше начать отладку запроса.Вещи, которые могут помочь вам в отладке запроса.

  1. Установите модуль разработки. Войдя в систему как администратор, посетите"yoursitename.com/devel/php "здесь вы можете выполнить любой php-код.

  2. Поместите свой запрос туда и добавьте эту dpm($result); одну строку кода в последнюю часть запроса. Выполните запрос, посмотрите, что вы получите в результате.

  3. Если при выполнении запроса возникает ошибка, посетите раздел "ваше имя пользователя/администратор/отчеты/dblog". и попытайтесь выяснить причину ошибки.

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

`dpm((string) $query);`

Непосредственно перед $result = $query->выполнить(); а также не забудьте прокомментировать $result = $query->выполнить(); так как выполнение запроса может привести к ошибке в вашем случае.

 0
Author: arpitr, 2013-12-18 06:38:10

Я думаю, что вам нужно повторить цикл данных, поступающих из этого запроса "выберите *из узла, где тип="сделка" и статус=1".

Внутри цикла вам нужно передать данные в указанный выше запрос db_select, который вы получили. Надеюсь, это решит вашу проблему!!!!

 0
Author: Deepak Kumar, 2013-12-18 11:07:57

Я выполнил успешный запрос в своем модуле, я возвращаю результат в виде блока, реализуя hook_block_info().

Пожалуйста, проверьте код модуля ниже t('category block'),

);

}

Функция custom_category_block_view($delta=") {

Функция custom_category_block_view($delta="){

$блок = массив(); переключатель ($дельта){ кейс "мои ссылки": $узлы = db_query("выберите cat.tid в качестве cat_tid, cat.name как имя кошки, cat_parent.parent как идентификатор cat_parent_tid, количество(deals.nid) как no_of_deals из taxonomy_term_data как cat покинул внешнее объединение taxonomy_term_hierarchy как cat_parent на cat_parent.tid=cat.tid левое внешнее соединение field_revision_field_categories как store_categories в store_categories.field_categories_tid=кат.тид левое внешнее соединение field_revision_field_store как магазины сделок на field_store_nid=категории магазинов.entity_id левое внешнее соединение (выберите * из узла, где тип ="сделка" и статус=1) как сделки на nid=магазины сделок.entity_id , где кат.вид=5 группа по кат.тид, cat.name, cat_parent.родитель");

$list = array(
    '#theme' => 'links',
    '#links' => array(),
    '#prefix' => '<div class="my-links"><h2>Related Links</h2>',
    '#suffix' => '</div>',
  );

Для каждого ($узлы как $запись) {

$список['#ссылки'][]=массив('заголовок'=>$запись->имя кошки.' ('.$запись->no_of_deals. ')' );

  }

$блок["тема"] = t("блок категорий"); $блок['содержимое'] = $список; перерыв; } вернуть блок $; }

Просто создайте пользовательский модуль и добавьте его в свой файл модуля, и все готово.

 0
Author: Mudasir, 2013-12-19 06:04:56