Я использую Views 7.x-3.6, и я попытался изменить GROUP BY
предложение hook_views_query_alter()
следующим образом:
function mymodule_views_query_alter(&$view, &$query) {
if ($view->name == "view_name"){
$query->add_groupby('field_name');
dpm($query);
}
}
Когда я смотрю в $query
, положение активизировано правильно , но запрос SQL не влияет : пункт не появляется:groupby
GROUP BY
В конечном итоге я использовал хук ядра Drupal ( hook_query_alter()
), и он работал нормально: теперь на SQL влияет.
function mymodule_query_alter(QueryAlterableInterface $query) {
$view_name = 'view_name';
if ($query->hasTag('views_' . $view_name)) {
$query->groupBy('field_name');
}
}
Любая причина, почему мой hook_views_query_alter()
не работает? Мне интересно, есть ли более чистый способ сделать это и
nid
с группой по. Мне это не нужно. Любой другой вариант? Вы знаете, как добавить уникальный в запросе представления?views_handler_filter::query()
воздухе. Попробуйте$query->distinct();
вhook_query_alter
Поздно на вечеринку, но это может помочь кому-то еще.
В моем случае я предоставлял список пользователей (используя дополнительный модуль Profile2) с полем Taxonomy Term ( https://drupal.org/node/1808320 ). Я видел многократные результаты, от которых я не мог избавиться через Представления 3 API.
В свой пользовательский модуль я добавил:
Параметры для add_field:
источник
Если вы по-прежнему сталкиваетесь с ненужными инструкциями GROUP BY, добавленными в запрос, вы можете удалить их в
hook_query_alter()
. Например, я решил проблему с упорядочением комментариев по большинству комментариев родителей.Итак, у
hook_views_query_alter()
меня есть:Я получил ошибку, связанную с невозможностью группировки по
поле, которое на самом деле является результатом
COUNT()
функции SQL .Я закончил с этим:
источник
Если вы посмотрите документацию по hook_views_query_alter , я считаю, что запрос уже готов к запуску. Например, API базы данных заменили замену, и он будет отправлен по проводной связи в MySQL. Другой пример использования hook_views_query_alter можно увидеть в блоге BTMash .
В этом случае у вас больше нет объекта Query Object, а есть фрагменты оператора SQL с выражениями, переменными и т. Д. В виде массива.
У меня нет запроса передо мной, но вам нужно что-то вроде следующего непроверенного кода:
источник
$query
объект изменен (конечно, не так, как указано выше), но опять же, SQL-запрос не меняется!Это то, как это делается в views_query_alter; часть node_access не обязательна.
источник
Мне было интересно, что никто не дал реальное решение, которое просто работает. Есть один такой метод, который я нашел здесь , большое спасибо @ b-ravanbakhsh:
источник
В Drupal 8 и благодаря подходу graceman9 это будет:
источник