Пытаюсь написать функцию подсчета количества по двум словарям таксономии:
<?phpfunction node_count($vid_1_tid, $vid_2_tid){
$query = db_select('taxonomy_term_data', 't');
$query->join('taxonomy_index', 'i', 'i.tid = t.tid');
$query->addField('i', 'nid');
$query->condition(
db_and()
->condition('t.tid', $vid_1_tid)
->condition('t.tid', $vid_2_tid)
);
$query->addTag('node_access');
$tids = $query->execute()->fetchCol();
return count($tids);
}?>
$vid_1_tid и $vid_2_tid - tid терминов из разных словарей.
Функция не подсчитывает количество. Что не так делаю?
Комментарии
Я бы, честно говоря сначало составил простой sql потом бы написал бы в орм запрос.
Во-первых db_and здесь не нужно, если просто добавить 2 condition между ними и так будет AND
А во-вторых, нету таких терминов, которые имеют одновременно два tid
не согласен. Если нода ссылается на 2 словаря, соответственно в таблице taxonomy_index записывается 2-мя строками:
{nid} - {tid} 1 словаря
{nid} - {tid} 2 словаря
Пробовал в sql, результат тот же... Ошибка в логике запроса.
Так вот в том то и дело, что это две разные записи с разными tid, а ты пытаешься выбрать запись с одновременно двумя tid - логика в корне неверна
логика примерно такая
$query = db_select('taxonomy_index', 'ti');
$query->addField('ti', 'nid');
$query->addTag('node_access');
$sub_query = clone $query;
$query->condition('ti.tid', $vid_1_tid);
$sub_query->condition('ti.tid', $vid_2_tid);
$nids1 = $query->execute()->fetchCol();
$nids2 = $sub_query->execute()->fetchCol();
$nids = array_intersect($nids1, $nids2);
return count($nids);
}