Представления: Агрегированные данные Не группируются по полю даты


Итак, я использую Drupal 7.19 и просмотры 3.5. По какой-то причине я не могу группироваться по полю даты, несмотря ни на что!

Я создал простое представление, в котором отображается количество узлов, опубликованных за месяц. Таким образом, я выбрал поля Nid и Post date, включил агрегацию, рассчитывал на Nid и группировал Post date.

Нет группировки. Для каждого отдельного узла в базе данных извлекается запись, как будто группировка полностью игнорируется.

Если вы запустите инструкцию SQL, которую представления генерируют в базе данных, вы также получите полный набор результатов, но это, очевидно, связано с тем, что сами временные метки UNIX отличаются, если даже моя секунда. Это ожидаемо. Как я могу сгруппировать представления по форматированному значению, такому как месяц, год и т.д., Чтобы избежать этой проблемы?

Я перепробовал все, что предлагалось здесь и в других местах - у меня уже был отключен модуль RDF, очищен кэш, добавлен новый формат даты, убран пробел из поле даты, я даже отключил модуль Date, опасаясь, что он конфликтует с ним.

Это сводит меня с ума! Буду признателен за любые предложения. Спасибо.

 2
Author: 9ee1, 2013-05-24

4 answers

Вы не можете группировать по полям, которые не равны. Дата публикации - это поле даты и времени в формате времени unix (количество секунд с 1/1/1970). Если у вас нет нескольких узлов, созданных в один и тот же момент времени, вы не сможете группироваться в этом поле.

Вам придется сгруппироваться по производной. Посмотрите, как это делает стандартное представление архива. Запрос

SELECT DATE_FORMAT((DATE_ADD('19700101', INTERVAL node.created SECOND) + INTERVAL -14400 SECOND), '%Y%m') AS created_year_month, COUNT(node.nid) AS num_records
FROM 
{node} node
WHERE (( (node.status = '1') ))
GROUP BY created_year_month
ORDER BY created_year_month DESC
LIMIT 30 OFFSET 0

Это помещает созданную дату в форму ГГГГ. Вам придется переписать поле и группа по переписанным результатам. Таким образом, вы имеете дело только с частями даты за год и месяц.

Представление архива делает это с заранее определенным "фиктивным полем", называемым created_year_month. Это поле доступно в качестве аргумента (только), поскольку оно определено как таковое в обработчиках представлений по умолчанию.

Чтобы достичь аналогичного результата в вашем собственном представлении, вы можете либо клонировать представление архива и попытаться изменить его для своих целей, либо вам придется написать свой собственные обработчики "полей", позволяющие отображать поле в желаемом формате для вашего представления. Другой вариант - использовать модуль Представления формата даты SQL, который делает именно это.

 2
Author: Triskelion, 2013-05-25 21:34:46

Для группировки по полю даты просто скопируйте контекстный фильтр из представления архива по умолчанию. Нет необходимости включать агрегацию. Настройки, показанные на рисунке:

enter image description here

 3
Author: Bn Mk, 2013-10-08 10:16:37

Я только что сам столкнулся с этой проблемой: невозможность сгруппироваться в поле "Дата публикации". Я просто создал другое поле даты, использовал детализацию дня, затем оно автоматически собирает опубликованную дату по мере создания узлов, не касаясь ее. Теперь все работает нормально..

 0
Author: Rich Stevens, 2014-02-04 12:29:01

Если вы используете агрегацию и хотите выполнить сортировку в порядке создания узла, просто выполните сортировку по идентификатору узла. Каждый раз, когда создается новый узел в drupal, он всегда увеличивается с использованием последнего созданного узла. Не имеет значения, был ли удален предыдущий узел, независимо от последнего идентификатора узла... drupal добавит 1.

 0
Author: dimmech, 2016-08-24 20:03:04