Доброго времени суток, уважаемые коллеги!
У меня не получается составить правильный запрос к базе данных.
Есть тип материала и 2 связанных с ним словаря таксономии. Используя Database API хотелось бы получить эти значения.
Суть проблемы: получить данные водном запросе.
Я могу получить данные 2-мя запросами, по одному на каждый словарь, а вот получить эти данные одним запросом не получается.
Первый запрос:
<?php
$nid = $_GET['nid'];
$query = db_select('node', 'n');
$query->innerJoin('field_data_field_region', 'r', 'n.nid = r.entity_id');
$query->innerJoin('taxonomy_term_data', 'tr', 'tr.tid = r.field_region_tid');
$query->fields('tr', array('name'));
$query->condition('n.nid', $nid);
$query->condition('n.status', 1);
$uch = $query->execute()->fetchAll();
print_r($uch);
?>
Второй запрос:
<?php
$nid = $_GET['nid'];
$query = db_select('node', 'n');
$query->innerJoin('field_data_field_vid_ispolzovaniya', 'v', 'n.nid = v.entity_id');
$query->innerJoin('taxonomy_term_data', 'tr', 'tr.tid = v.field_vid_ispolzovaniya_tid');
$query->fields('tr', array('name'));
$query->condition('n.nid', $nid);
$query->condition('n.status', 1);
$uch = $query->execute()->fetchAll();
print_r($uch);
?>
Помогите объединить эти запросы в один
Комментарии
Можете смело делать запрос к taxonomy_index
В том то и дело, что я не понимаю логики запроса. Мне нужно из одной таблицы taxonomy_term_data 2 раза достать одно поле name, причём так, чтобы первое значение соответствовало первому словарю, а второе - соответственно второму. Я не совсем понимаю, как такой запрос составить на SQL, а раз не понимаю этого, то не могу его перевести в database API.
FROM node AS n
INNER JOIN field_data_field_tags AS nr1 ON n.nid = nr1.entity_id
INNER JOIN taxonomy_term_data AS tr ON tr.tid = nr1.field_tags_tid
INNER JOIN field_data_field_article_category AS nr2 ON nr2.entity_id = n.nid
INNER JOIN taxonomy_term_data AS tr2 ON tr2.tid = nr2.field_article_category_tid
ORDER BY n.nid ASC
Как вариант. В SQL не сильно шарю, но зачем innerJoin? Дубли же будут.
через taxonomy_index будет быстрее работать, а принцип:
$query = db_select('node', ' n')
->fields('n')
->addTag('content accees');
$query->innerJoin('taxonomy_index', 'ti', "ti.nid = n.nid")
$query->innerJoin('taxonomy_term_data' , 'ttd', 'ttd.tid = ti.tid');
$query->condition('ttd.vid', $my_vids, 'IN');
$res = $query->execute()->fetchAll();
...
К сожалению, так и не получилось решить вопрос. Даже используя только ваш кусок кода и вместо $my_vids подставив array(3, 4) - id моих словарей, получаю ничего. Пустоту.