Php SQL查询以选择具有开始和结束日期的即将发生的事件

Php SQL查询以选择具有开始和结束日期的即将发生的事件,php,mysql,doctrine,Php,Mysql,Doctrine,我需要显示数据库中即将发生的事件。问题是,当我使用我当前使用的查询时,开始日期已过的任何事件都将显示在即将到来的事件列表的较低位置,而不管它们是当前事件 我的桌子(yaml): 我的问题(原则): 基本上,我希望目前正在进行的任何活动(因此,如果今天介于开始日和结束日之间)都排在列表的首位。如果可能的话,我该怎么做呢?原始sql查询也是很好的答案,因为它们很容易转换为DQL 解决方案 基于以下答案之一: $results = Doctrine_Query::create()

我需要显示数据库中即将发生的事件。问题是,当我使用我当前使用的查询时,开始日期已过的任何事件都将显示在即将到来的事件列表的较低位置,而不管它们是当前事件

我的桌子(yaml):

我的问题(原则):

基本上,我希望目前正在进行的任何活动(因此,如果今天介于开始日和结束日之间)都排在列表的首位。如果可能的话,我该怎么做呢?原始sql查询也是很好的答案,因为它们很容易转换为DQL

解决方案 基于以下答案之一:

    $results = Doctrine_Query::create()
        ->from("sfEventItem e, e.Category c")
        ->select("e.title, e.start_day, e.description, e.category_id, e.slug")
        ->addSelect("c.title, c.slug")
        ->addSelect("IF(NOW() BETWEEN e.start_day AND e.end_day,0,1) as score")
        ->orderBy("score, e.start_day, e.start_time, e.title")
        ->limit(5)
        ->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
这应该做到:

->orderBy("IF(NOW() BETWEEN e.start_day AND e.end_day,0,1) , e.start_day, e.start_time, e.title")
你可以用

当当前日期介于开始日期和结束日期之间时添加案例,分数为1。 得分为0的所有其他人


然后按分数排序。

谢谢,我不知道MySQL有这个。不幸的是,Doctrine不支持这一点(我们为方便而付出的代价…)+1,我认为这很简洁,并且经过了一点修改(出于某种原因,Doctrine在orderBy中停止选择任何记录)
    $results = Doctrine_Query::create()
        ->from("sfEventItem e, e.Category c")
        ->select("e.title, e.start_day, e.description, e.category_id, e.slug")
        ->addSelect("c.title, c.slug")
        ->addSelect("IF(NOW() BETWEEN e.start_day AND e.end_day,0,1) as score")
        ->orderBy("score, e.start_day, e.start_time, e.title")
        ->limit(5)
        ->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
->orderBy("IF(NOW() BETWEEN e.start_day AND e.end_day,0,1) , e.start_day, e.start_time, e.title")