Помогите плиз с запросом к БД. Есть массив с tid (2,118) создается динамично. Нужно получить сумму нод c данными терминами.
Пытался получить желаемое из таблички term_node
SELECT COUNT(nid)
FROM term_node
WHERE tid IN (2,118)
Получаю сумму нод с терминами без связки:
Рамки - 5000&&Школьные 100=5100
А нужно:
Рамки - 5000&&Школьные 100=60
Мой запрос не правильный, так еще и без проверки на статус нод-это пока не главное, допилю...
Помоги пожалуйста
Комментарии
Подсчитать количество нод у которых есть tid1 и tid2
$sql = "
SELECT COUNT(tn.nid )
FROM {term_node} tn
INNER JOIN {term_node} tn1 ON tn.nid = tn1.nid
AND tn1.tid = %d
WHERE tn.tid = %d
";
args[] = tid1;
args[] = tid2;
$count = db_result(db_query(db_rewrite_sql($sql), $args)));
Спасибо! Работает!
А если количество терминов не известно заранее? В цикле сравнивать?
Не будет ли такие запросы слишком тяжелыми, если собираюсь повесить на клик в раскрытом фильтре?
Один запрос
$alias = tn . $tid;
$sql += ' INNER JOIN {term_node} ' . $alias . ' ON ' . $alias . '.nid = n.nid AND ' . $alias . '.tid = %d';
$args[] = $tid;
}
Не будут тяжелые, вот здесь на фильтрах работает c ajax http://crim.com.ua
Нашел подобную тему форума: http://www.drupal.ru/node/43207
Вот мой запрос к БД:
<?php
// получаю тиды строкой
$terms = explode(",", $_POST['tid']);
//собираю запрос
$sql .= 'SELECT COUNT(DISTINCT n.nid) AS cnt FROM node n ';
foreach($terms as $tid){
$alias = ' tn'.$tid;
$sql .= ' INNER JOIN {term_node} ' .$alias. ' ON '.$alias.'.nid = n.nid
AND '.$alias.'.vid = n.vid
AND n.status =1
AND '.$alias.'.tid = %d ';
$args[] = $tid;
}
$count = db_result(db_query(db_rewrite_sql($sql), $args));
?>
Как работает у меня http://photoshopic.com/phony
Правда нужно еще пилить :), у меня мульти-выбор категорий, по-этому подсчет не всегда корректен.
sas@drupal.org, спасибо за помощь!