我正在尝试获取按两个日期的最高值排序的所有主题的列表:
两个值都在不同的表中。我在Phalcon中使用查询,这个可以工作,但不能做我想做的事情。这可能是因为我没有指定我想要计算最后一篇文章的日期(也许是选择第一篇,我不确定)?我希望有人可以帮助我使这个查询工作。
$phql = "SELECT ForumTopic.*
FROM ForumTopic
LEFT JOIN ForumTopicPost
ON ForumTopic.id = ForumTopicPost.topic_id
WHERE ForumTopic.forum_id = ".$forum->id."
GROUP BY ForumTopicPost.topic_id
ORDER BY GREATEST(
COALESCE(ForumTopic.created_at, '0000-00-00 00:00:00'),
COALESCE(ForumTopicPost.created_at, '0000-00-00 00:00:00')
) DESC";
$all_topics = $this->modelsManager->executeQuery($phql);
答案 0 :(得分:2)
这是您的查询,使用别名来简化对它的理解:
SELECT ft.*
FROM ForumTopic ft LEFT JOIN
ForumTopicPost ftp
ON ft.id = ftp.topic_id
WHERE ft.forum_id = ".$forum->id."
GROUP BY ftp.topic_id
ORDER BY GREATEST(COALESCE(ft.created_at, '0000-00-00 00:00:00'),
COALESCE(ftp.created_at, '0000-00-00 00:00:00')
) DESC
GROUP BY
给我的是什么。您没有聚合函数,也没有ftp
的引用。我想你想要这样的东西:
SELECT ft.*
FROM ForumTopic ft LEFT JOIN
ForumTopicPost ftp
ON ft.id = ftp.topic_id
WHERE ft.forum_id = ".$forum->id."
GROUP BY ft.topic_id
ORDER BY GREATEST(COALESCE(ft.created_at, '0000-00-00 00:00:00'),
COALESCE(MAX(ftp.created_at), '0000-00-00 00:00:00')
) DESC;
请注意,除了MAX()
之外,group by
也发生了变化。您希望按第一个表中的id进行聚合。在第二个表格中可能是NULL
。