1

CakePHP 1.3 を使用してアプリケーションを開発しています。ユーザーが「アウトレット」テーブル レコードを検索できるページがあります。

検索フォームには 3 つのフィールドがあります。名前料理郵便番号。検索用のビューは次のようになります。http://pastebin.com/vadS4gcb

郵便番号フィールドのみの検証を設定しました。空のままにすることもできますが、値を入力すると、CakePHP に組み込まれている郵便番号検証ルールが適用されます。これは、Outlets コントローラーで検索アクションがどのように見えるかです。http://pastebin.com/jiPUehkv .

ユーザーが検索フィールドに有効な郵便番号を入力すると、Outlets テーブルから一致するレコードが取得され、ユーザーが入力した郵便番号からの距離 (マイル) とともに検索結果ページに表示されます。検索機能を実装するために CakeDC の検索プラグインを使用しましたhttp://cakedc.com/downloads/view/cakephp_search_plugin

私の Outlet モデル クラスは次のようになります。http://pastebin.com/yJ1HykTT .

検索機能はほぼ期待どおりに機能しますが、距離だけで検索すると (つまり、検索フィールドに郵便番号を入力し、他の 2 つのフィールドを空白のままにすると)、指定された郵便番号から 1 マイル未満のアウトレットは検索されないことに気付きました。 DB。これがなぜなのかわかりません。

他の 2 つのフィールド (名前料理)のいずれかの検索フォームにデータを入力し有効な郵便番号を入力 すると、1 マイル以内のレコードを含むすべての一致するレコードが取得されます。なぜこれが前のケースで起こっていないのか分かりません。

郵便番号のみが入力された場合のクエリを次に示します。http://pastebin.com/37A0SP7G

以下は、郵便番号が提供され、名前フィールドにテキストが入力された場合のクエリです。http://pastebin.com/a2mR7Yi0

Google のガイドに従って、Haversine クエリを作成しました。http://code.google.com/intl/hu-HU/apis/maps/articles/phpsqlsearch.html私に与えた:

'( 3959 * acos( cos( radians("'.$latLong['latitude'].'") ) * cos( radians( Outlet.latitude ) ) * cos( radians( Outlet.longitude ) - radians("'.$latLong['longitude'].'") ) + sin( radians("'.$latLong['latitude'].'") ) * sin( radians( Outlet.latitude ) ) ) )';
4

0 に答える 0