Представления: Агрегированные данные Не группируются по полю даты
Итак, я использую Drupal 7.19 и просмотры 3.5. По какой-то причине я не могу группироваться по полю даты, несмотря ни на что!
Я создал простое представление, в котором отображается количество узлов, опубликованных за месяц. Таким образом, я выбрал поля Nid
и Post date
, включил агрегацию, рассчитывал на Nid
и группировал Post date
.
Нет группировки. Для каждого отдельного узла в базе данных извлекается запись, как будто группировка полностью игнорируется.
Если вы запустите инструкцию SQL, которую представления генерируют в базе данных, вы также получите полный набор результатов, но это, очевидно, связано с тем, что сами временные метки UNIX отличаются, если даже моя секунда. Это ожидаемо. Как я могу сгруппировать представления по форматированному значению, такому как месяц, год и т.д., Чтобы избежать этой проблемы?
Я перепробовал все, что предлагалось здесь и в других местах - у меня уже был отключен модуль RDF
, очищен кэш, добавлен новый формат даты, убран пробел из поле даты, я даже отключил модуль Date
, опасаясь, что он конфликтует с ним.
Это сводит меня с ума! Буду признателен за любые предложения. Спасибо.
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, который делает именно это.
Для группировки по полю даты просто скопируйте контекстный фильтр из представления архива по умолчанию. Нет необходимости включать агрегацию. Настройки, показанные на рисунке:
Я только что сам столкнулся с этой проблемой: невозможность сгруппироваться в поле "Дата публикации". Я просто создал другое поле даты, использовал детализацию дня, затем оно автоматически собирает опубликованную дату по мере создания узлов, не касаясь ее. Теперь все работает нормально..
Если вы используете агрегацию и хотите выполнить сортировку в порядке создания узла, просто выполните сортировку по идентификатору узла. Каждый раз, когда создается новый узел в drupal, он всегда увеличивается с использованием последнего созданного узла. Не имеет значения, был ли удален предыдущий узел, независимо от последнего идентификатора узла... drupal добавит 1.