Я думаю, что вам нужно создать производную таблицу из вашего запроса объединения, прежде чем вы сможете сгруппировать ее -
SELECT projectId, MAX(rowDate) AS rowDate
FROM (
(
SELECT project_posts.projectid as projectId, `project_posts`.`date` as rowDate
FROM `project_posts`
) UNION ALL (
SELECT `project_comments`.projectid as projectId, project_comments.`date` as rowDate
FROM `project_comments`
)
) AS tmp
GROUP BY projectId
ORDER BY rowDate DESC
LIMIT 10
У меня не было возможности попробовать это, но она должна делать то, что вам нужно -
SELECT p.id, GREATEST(IFNULL(MAX(pc.date), 0), IFNULL(MAX(pp.date), 0)) AS max_date
FROM projects p
LEFT JOIN project_comments pc
ON p.id = pc.projectid
LEFT JOIN project_posts pp
ON p.id = pp.projectid
GROUP BY p.id
ORDER BY max_date DESC
LIMIT 10
ОБНОВЛЕНИЕ Запрос на основе UNION должен быть значительно быстрее, чем этот второй запрос.Я провел несколько грубых тестов с использованием фиктивных данных (100 тыс. Проектов, 200 тыс. Публикаций и 700 тыс. Комментариев), а запрос многопользовательского объединения занимает в три-пять раз больше времени, чем запрос UNION.