Добавьте функцию МАКСИМАЛЬНОЙ агрегации в запрос


Я создаю запрос с помощью $query = new db_select('node', 'n') и группирую по определенному полю (скажем, $query->groupBy('title')), когда я объединяю другое поле (например, $query->addField('n', 'MAX(nid)')), оно очищается в поле с именем n.MAXnid (которое вылетает с предупреждением при выполнении)

Как я могу добавить поле n.MAX(nid) в свой запрос select?

 1
Author: Daniel, 2011-08-18

2 answers

В Drupal 7 вы должны добавить выражение для этого.
Подробнее о Динамических запросах > Выражения

 3
Author: kalabro, 2014-05-25 14:11:26

В вашем случае код должен быть чем-то похожим на следующий:

$query = db_select('node', 'n')->groupBy('title');
$query->addExpression('MAX(nid)', 'max_nid');

Вы не используете $query = new db_select('node', 'n'); db_select() уже возвращает объект. Если вы хотите клонировать этот объект, вам не следует вызывать на нем new.

$ запрос->Addexpression() возвращает псевдоним, используемый в настоящее время для добавляемого выражения; обычно это тот же псевдоним, переданный методу, но он может отличаться, если псевдоним уже используется. В этом случае псевдонимом будет max_nid, если max_nid еще не используется, или max_nid_N, если псевдоним уже используется; N - целое число, которое добавляется, чтобы сделать псевдоним уникальным.
Использование псевдонима, возвращаемого из $query->addExpression(), важно, когда функция изменяет запрос, переданный из других функций, например, в случае запроса, переданного крюку. В данном конкретном случае в этом нет необходимости, так как вызывающая функция db_select() также добавляет выражение.

 11
Author: kiamlaluno, 2012-11-01 11:50:18