按两个不同表中的两个日期时间字段的最高值排序

时间:2014-06-21 13:11:30

标签: mysql phalcon

我正在尝试获取按两个日期的最高值排序的所有主题的列表:

  1. 关于该主题的最新帖子的日期或
  2. 主题开始的日期
  3. 两个值都在不同的表中。我在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);
    

1 个答案:

答案 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