2011-07-14 12 views
0

私は2つのテーブル、場所と予測を持っています。私は毎日の予測パラメータと一致するすべての場所を見つけるためにデータベースを照会したいと思います。Doctrineの条件付き結合?

ロンドンは、2011年7月13日、2011年7月14日、2011年7月15日、および2011年7月16日のエントリを予測しています。 2011年7月14日と2011年7月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';

これをDoctrineに翻訳しようとしましたが、メモリが不足しています。私のDoctrineクエリ:

正確な&このクエリを実行する最も効率的な方法は何ですか?私は根本的に何かをやっていると確信しています。事前に
ピート

答えて

2

多くのおかげで私は各条件を選択し、内側文で$query->addWhere('EXISTS (...)')を使用することが容易になるだろうと思います。

$this->results = Doctrine_Query::create()->select('name')->from('location'); 

foreach ($values['day'] as $i => $day) { 
    $this->results->addWhere('EXISTS (
     SELECT NULL 
     FROM forecast 
     WHERE location_id = location.id 
     AND condition_id IN (' . implode(',', $values['condition']) . ') 
     AND temperature_high <= ' . $values['temperature_max'] . ' 
     AND temperature_low >= ' . $values['temperature_min'] . ' 
    )'); 
} 
$this->results->execute(); 
+0

ありがとうございます。作品は完全に –

+0

Doctrine 2に変更するには? –

+0

@OlegAbrazhaev [Doctrine Symfony2のためのEXISTSで照会](/ q/10030538)をご覧ください。 –