Задача: необходимо для одного из полей набора нодов вычислить среднее число (исключая пустые), минимальное и максимальное и сделать вывод в блок.
Подскажите как лучше реализовать.
Нашел в Инете, что может быть полезно использовать Computed_Field и views_customfield.
Не очень понятно как computed_field может помочь если нужно обработать значения всех нодю
Что думаете по данному поводу? Какие есть варианты?
Комментарии
что то вроде...
<?php
$dbh = db_query("SELECT AVG(filed_price_value) FROM {content_field_price} pr left join {node} n on (pr.nid=n.nid) where n.type='product'");
$items = array();
while($row = db_fetch_array($dbh)){
$items[] = $row;
}
echo theme('item_list', $items);?>
Спасибо большое за ответ.
Я так интерпретирую, что никакими средствами модулей задача не решается, а самое правильное это прямой запрос в БД по типу того, что приведен.
Я не вижу смысла писать такой модуль и выкладывать его на друпал.орг.
Если нужно такой модуль модуль можно и самому написать - за основу взяв этот код
собственно, если посмотреть подобный модуль, если бы он существовал или существует то там был бы подобный код с вариативной частью - выбор по каким полям считать может что то еще
Очень помог разобраться код с комментария в http://www.drupal.ru/node/21432
Мой код в результате:
<?php
$count_accounts_tot = db_fetch_array(db_query('SELECT COUNT(uid) FROM {users}'));
$count_accounts_blo = db_fetch_array(db_query('SELECT COUNT(uid) FROM {users} WHERE status=0'));
$count_nodes_tot = db_fetch_array(db_query('SELECT COUNT(nid) FROM {node}'));
$count_nodes_pub = db_fetch_array(db_query('SELECT COUNT(nid) FROM {node} WHERE status=1'));
$count_comments_tot = db_fetch_array(db_query('SELECT COUNT(cid) FROM {comments}'));
$count_comments_pub = db_fetch_array(db_query('SELECT COUNT(cid) FROM {comments} WHERE status=0'));
$count_product_tot = db_fetch_array(db_query('SELECT COUNT(nid) FROM {content_type_product}'));
$avg_product_price = db_fetch_array(db_query('SELECT AVG(field_price_single_value) FROM {content_type_product}'));
$min_product_price = db_fetch_array(db_query('SELECT MIN(field_price_single_value) FROM {content_type_product}'));
$max_product_price = db_fetch_array(db_query('SELECT MAX(field_price_single_value) FROM {content_type_product}'));
$header = array('Показатель', 'Значение');
$rows = array
(
array(t('Аккаунтов'), $count_accounts_tot['COUNT(uid)']-1),
array(t('…заблокированных'), $count_accounts_blo['COUNT(uid)']-1),
array(t('Документов'), $count_nodes_tot['COUNT(nid)']),
array(t('…опубликованных'), $count_nodes_pub['COUNT(nid)']),
array(t('Комментариев'), $count_comments_tot['COUNT(cid)']),
array(t('…опубликованных'), $count_comments_pub['COUNT(cid)']),
array(t('Всего продуктов'), $count_product_tot['COUNT(nid)']),
array(t('Средняя цена продукта'), $avg_product_price['AVG(field_price_single_value)']),
array(t('Минимальная цена продукта'), $min_product_price['MIN(field_price_single_value)']),
array(t('Максимальная цена продукта'), $max_product_price['MAX(field_price_single_value)']),
);
return theme('table', $header, $rows);
?>