Выполнение 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, но получил неожиданную ошибку, Также я попытался добавить этот запрос в блок, но снова получил ту же ошибку. Я также создал пользовательский блок в пользовательском модуле, который тоже не работал. Пожалуйста, помогите мне, как я могу выполнить этот запрос. Ответ будет очень признателен.
3 answers
Вам лучше начать отладку запроса.Вещи, которые могут помочь вам в отладке запроса.
Установите модуль разработки. Войдя в систему как администратор, посетите"yoursitename.com/devel/php "здесь вы можете выполнить любой php-код.
Поместите свой запрос туда и добавьте эту
dpm($result);
одну строку кода в последнюю часть запроса. Выполните запрос, посмотрите, что вы получите в результате.Если при выполнении запроса возникает ошибка, посетите раздел "ваше имя пользователя/администратор/отчеты/dblog". и попытайтесь выяснить причину ошибки.
Вы также можете перепроверить, совпадает ли запрос, возвращаемый с помощью функций-оболочек drupal, с вашим исходным запросом, введя строку в объект запроса, для этого добавьте
`dpm((string) $query);`
Непосредственно перед $result = $query->выполнить(); а также не забудьте прокомментировать $result = $query->выполнить(); так как выполнение запроса может привести к ошибке в вашем случае.
Я думаю, что вам нужно повторить цикл данных, поступающих из этого запроса "выберите *из узла, где тип="сделка" и статус=1".
Внутри цикла вам нужно передать данные в указанный выше запрос db_select, который вы получили. Надеюсь, это решит вашу проблему!!!!
Я выполнил успешный запрос в своем модуле, я возвращаю результат в виде блока, реализуя 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("блок категорий"); $блок['содержимое'] = $список; перерыв; } вернуть блок $; }
Просто создайте пользовательский модуль и добавьте его в свой файл модуля, и все готово.