[РЕШЕНО] Сложная выборка

Главные вкладки

Аватар пользователя virbus virbus 16 октября 2015 в 0:13

Пытаюсь написать функцию подсчета количества по двум словарям таксономии:

<?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 терминов из разных словарей.

Функция не подсчитывает количество. Что не так делаю?

Комментарии

Аватар пользователя drupby drupby 16 октября 2015 в 1:53

"virbus" wrote:
 $query->condition(
        db_and()
            ->condition('t.tid', $vid_1_tid)
            ->condition('t.tid', $vid_2_tid)
    );

Во-первых db_and здесь не нужно, если просто добавить 2 condition между ними и так будет AND
А во-вторых, нету таких терминов, которые имеют одновременно два tid

Аватар пользователя virbus virbus 16 октября 2015 в 13:23

"drupby" wrote:
А во-вторых, нету таких терминов, которые имеют одновременно два tid

не согласен. Если нода ссылается на 2 словаря, соответственно в таблице taxonomy_index записывается 2-мя строками:
{nid} - {tid} 1 словаря
{nid} - {tid} 2 словаря

"dashiwa" wrote:
Я бы, честно говоря сначало составил простой sql потом бы написал бы в орм запрос.

Пробовал в sql, результат тот же... Ошибка в логике запроса.

Аватар пользователя drupby drupby 16 октября 2015 в 15:05

"virbus" wrote:
не согласен. Если нода ссылается на 2 словаря, соответственно в таблице taxonomy_index записывается 2-мя строками:
{nid} - {tid} 1 словаря
{nid} - {tid} 2 словаря

Так вот в том то и дело, что это две разные записи с разными tid, а ты пытаешься выбрать запись с одновременно двумя tid - логика в корне неверна

Аватар пользователя drupby drupby 16 октября 2015 в 15:45

"virbus" wrote:
Ошибка в логике запроса.

логика примерно такая

function node_count($vid_1_tid, $vid_2_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);
}