2010-11-30 12 views
2

ツアーhasManyの美脚検索()一致する各フィールドの1 CakePHPの

空港は、私は、CakePHPを使用して、各目的地の空港のための最も安い旅行を見つけることができますどのように何の団体

を持っていませんか?

私が考えることができるのは、空港の配列を通してforeachすることだけです。これはデータベースへの何百ものクエリを必要とするでしょう(これは最速の方法ではないと思います)。

function getCheapestTrip($origin){ 

$airports=$this->Airport->getAirports(); 
foreach($airports as $airport): 
$cheapest_flights=$this->Trip->find('first', 
array(
'conditions'=>array('Leg.origin'=>$origin, 'MIN(Trip.price) as price'), 
'fields'=>array('Trip.origin','price','Leg.destination','Leg.depart','Leg.arrive'), 
'recursive'=>2, 
)); 
endforeach; 
} 
} 

はまた、私はこのデータ型のものは、CakePHPの規約(脂肪モデル、スキニーコントローラ)あたりのモデルであるべきだと思います。 getAirportsのような別のモデルの関数を呼び出すために読み込んだのですが、loadModelを使うことができますが、CakePHPのコントローラメソッドのセクションでそれを見つけました。他のモデルのデータ/モデル関数を別のモデル/関数にどのように取得する必要がありますか?

ありがとうございます!

+0

あなたが提供したコードでは、$ airportをループしていますが、どこにでも$ airportを使用していません。何度も同じクエリを実行しています。あなたは病状がありませんか? – RabidFire

+0

ええ、私が投稿したコードは間違いなくちょうど出発点であり、以前は投稿したときに疲れました。私はこの事をもう一度考えてみようと思っています。もし私がそれを得ることができなければ、何か他のものを投稿/編集するつもりです。コメントしてくれてありがとう。 – JohnAllen

答えて

0

2番目の質問「別のモデル内でモデルを読み込む方法」の答え。 hereを見つけることができます。

0

もっと良いアルゴリズムを探しているなら、私は解決策がありません。

地雷は設計上の解決策です。基本的には、目的地の空港にフィールドを追加する必要があります。このフィールドは、新しい航空便を追加するたびに更新されます。

これは私があなたの問題を理解しているかどうかを表します。私は英語じゃないので、私は旅行に関連する「足」の意味に精通していないよ(私にはそれが身体の一部です)

0

あなたが解決しようとしている問題は、巡回セールスマン問題である:http://en.wikipedia.org/wiki/Travelling_salesman_problem

Googleマップの読み方から、最も一般的なルートと接続を事前に計算したいと思うでしょう。そのあらかじめ計算された情報を安価なキャッシュに保存してください(memcache prolly)。基本的には、毎回再計算することができないので、いくつかの一般的な計算を計算し、事前計算されたキャッシュを構築します。

WRTアルゴリズム、いくつかのGoogleの検索ヒントやトリックのあなたの友人になります。この問題は何度も解決されています(どれも正確に計算効率が悪いので、事前計算とキャッシュが必要です)。

+0

私は実際にはユニークな目的地を見つけようとしています。同様にorigin_airportから各可能な目的地までの最も安い便を見つけてください。私は問題をうまく説明しなかった。私にとっては難しいものでした。 – JohnAllen

関連する問題