Получить ноду , отмеченную несколькими терминами

Отправлено planktun от вт, 11/08/2016 - 18:59

Сопоставление nid и tid находится в таблице taxonomy_index , наша задача отобрать только те , которые отмечены всеми интересующими нас терминами .

        //формируем запрос
        $query = "SELECT nid FROM  taxonomy_index WHERE tid = {$node->field_tags['und'][0]['tid']} "; 

        foreach($node->field_tags['und'] as $TID)
        {
            if($i==0) { $i=2; continue; }
            $query .=" AND nid IN (SELECT nid FROM  taxonomy_index WHERE tid = {$TID['tid']})";
        }
        
    }
    //$query .=" ORDER BY RAND() LIMIT 0,1 ";
    $result = db_query($query)->fetchField();

в итоге получится запрос следующего типа

SELECT nid FROM taxonomy_index WHERE tid = 417 AND nid IN (SELECT nid FROM taxonomy_index WHERE tid = 432) AND nid IN (SELECT nid FROM taxonomy_index WHERE tid = 273) AND nid IN (SELECT nid FROM taxonomy_index WHERE tid = 271)