Причина, по которой один столбец, использующий агрегатную функцию , работает, а версия со столбцами, не использующими агрегатные функции, не работает, заключается в том, что вам нужно указать GROUP BY
пункт. Вот как должен выглядеть ваш запрос:
SELECT COUNT(n.nid),
n.nid,
ctu.field_update_date_value
FROM NODE n
LEFT JOIN CONTENT_TYPE_UPDATE ctu ON ctu.vid = n.vid
WHERE n.type IN ('update')
GROUP BY n.nid, ctu.field_update_date_value
ORDER BY field_update_date_value DESC
Я заменил псевдонимы ваших таблиц на более короткие - более удобные для чтения. Вот суть вашей проблемы:
SELECT n.nid,
COUNT(n.fake_example_column),
ctu.field_update_date_value
...
GROUP BY n.nid, ctu.field_update_date_value
Я изменил пример, чтобы использовать фальшивый столбец, чтобы подчеркнуть, как следует определять GROUP BY. Любой столбец, на который вы ссылаетесь без использования агрегатной функции , должен быть упомянут в GROUP BY
. Я говорю, что должен , потому что MySQL - единственная база данных, которую я ' m знает, что поддерживает GROUP BY
, где вы можете выборочно опускать столбцы - есть множество SO-вопросов о том, почему запросы работают в MySQL, но не могут быть перенесены без изменений в другие БД. По-видимому, в вашем случае вам все равно нужно определить хотя бы один.
вернулся к основам:
SELECT COUNT( node.nid )
FROM node node
LEFT JOIN content_type_update node_data_field_update_date ON node.vid = node_data_field_update_date.vid
WHERE node.type IN ('update')
ORDER BY node_data_field_update_date.field_update_date_value DESC
Вероятно, на вашем сервере включен ONLY_FULL_GROUP_BY . Вы можете отключить его или добавить каждое из выбранных вами полей в группу с помощью.