Добавьте функцию МАКСИМАЛЬНОЙ агрегации в запрос
Я создаю запрос с помощью $query = new db_select('node', 'n')
и группирую по определенному полю (скажем, $query->groupBy('title')
), когда я объединяю другое поле (например, $query->addField('n', 'MAX(nid)')
), оно очищается в поле с именем n.MAXnid
(которое вылетает с предупреждением при выполнении)
Как я могу добавить поле n.MAX(nid)
в свой запрос select?
2 answers
В Drupal 7 вы должны добавить выражение для этого.
Подробнее о Динамических запросах > Выражения
В вашем случае код должен быть чем-то похожим на следующий:
$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()
также добавляет выражение.