У меня есть две таблицы, местоположение и прогноз. Я хотел бы запросить базу данных, чтобы найти все местоположения, которые соответствуют параметрам прогноза на каждый день.
например. В Лондоне есть прогнозные записи на дни 2011-07-13, 2011-07-14, 2011-07-15 и 2011-07-16. Я бы хотел, чтобы Лондон вернулся, если в 2011-07-14 И 2011-07-15 температура не выше 40 и не ниже 13.
Мне удалось решить это в MySQL (я думаю):
SELECT f1.day, f1.temperature_high, f1.temperature_low, f2.day, f2.temperature_high, f2.temperature_low, l.name
FROM location l
INNER JOIN forecast f1 ON
f1.location_id = l.id AND
f1.day = '2011-07-14' AND
f1.temperature_high <= '40' AND
f1.temperature_low >= '13'
INNER JOIN forecast f2 ON
f2.location_id = l.id AND
f2.day = '2011-07-15' AND
f2.temperature_high <= '40' AND
f2.temperature_low >= '13';
Я пытался перевести это в Доктрину, но у меня возникают ошибки исчерпания памяти. Мой запрос доктрины:
$this->results = Doctrine_Query::create()->select('l.name')->from('Location l');</p>
<p>foreach ($values['day'] as $i => $day) {
$this->results->innerJoin('l.Forecasts f'.$i.' ON
f'.$i.'.condition_id IN (' . implode(',', $values['condition']) . ') AND
f'.$i.'.temperature_high <= ' .$values['temperature_max'] . ' AND
f'.$i.'.temperature_low >= ' . $values['temperature_min']);
}
$this->results->execute();
Как правильно и наиболее эффективно выполнить этот запрос? Я почти уверен, что делаю что-то в корне неправильно.
Большое спасибо заранее
Пит