Разработка

Программно выбрать ноды без флага

Задача: Вывести список нод не помеченных определённым флагом.

Решение
В таблице flags узнаём fid флага.

$nids = array();
$result = db_query(«SELECT n.nid FROM {node} n WHERE n.status <> 0 AND n.type = '%s'», 'material_value');
while ($row = db_fetch_object($result)) {
  $nids[] = $row->nid;
}
print_r ($nids);

Получаем и выводим (для контроля) список всех нод, определённого типа.

$flag= array();
$result = db_query(«SELECT n.content_id FROM {flag_content} n WHERE n.fid = '%s'», '3');
while ($row = db_fetch_object($result)) {
  $flag[] = $row->content_id;
}
 
print_r ($flag);

Получаем и выводим список нод, помеченных искомым флагом.

$arr_diff=array_diff($nids, $flag);
print_r($arr_diff)

Вычитаем и выводим список нод без флага.

Спасибо.
Если имеете, что сказать — в комментарии. Я мог и ошибиться.

 
 
13.07.2011 — 14:11

Комментарии (6)

Аватар пользователя annya
13.07.2011 — 14:43
3
 
 

SELECT node.nid AS 
FROM node node  
LEFT JOIN flag_content flag_content_node ON node.nid = flag_content_node.content_id AND flag_content_node.fid = [id_flag] WHERE (node.status <> 0) AND (flag_content_node.uid IS NULL)

[id_flag] — заменяем на id своего флага

Не поверите откуда взяла :D

Аватар пользователя xandeadx
13.07.2011 — 15:50
1
 
 

пишите пожалуйста в тегах версию друпала

Аватар пользователя NaZg
14.07.2011 — 09:04
0
 
 

поправил

Аватар пользователя andypost
14.07.2011 — 18:06
4
 
 

А не проще ли пользоваться готовым API от самого флага? http://drupal.org/node/305086 или views http://drupal.org/node/296971

Аватар пользователя iNFerNo
15.07.2011 — 15:26
-5
 
 

А как вывести количество поставленных флагов для конкретной ноды?

Аватар пользователя NaZg
15.07.2011 — 17:26
1
 
 

Воспользуйтесь соответствующим разделом.
Пожалуйста.