Мне нужно отобразить предстоящие события из базы данных. Проблема в том, что когда я использую запрос, который я использую в настоящее время, любые события с прошедшим днем начала будут отображаться ниже в списке предстоящих событий независимо от того, являются ли они текущими
Мой стол (yaml):
columns:
title:
type: string(255)
notnull: true
default: Untitled Event
start_time:
type: time
end_time:
type: time
start_day:
type: date
notnull: true
end_day:
type: date
description:
type: string(500)
default: This event has no description
category_id: integer
Мой запрос (доктрина):
$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")
->orderBy("e.start_day, e.start_time, e.title")
->limit(5)
->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
По сути, я бы хотел, чтобы любые события, которые происходят в данный момент (поэтому, если сегодня между начальной и конечной датой), были в верхней части списка. Как бы я поступил так, если это вообще возможно? Необработанные 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);