Query不会检索CakePHP应用程序中的所有记录

时间:2012-01-09 16:12:59

标签: php mysql cakephp geolocation postal-code

我正在使用CakePHP 1.3开发一个应用程序。我有一个页面,允许用户搜索'Outlet'表记录。

我在搜索表单中有三个字段; 名称美食邮政编码。这就是搜索视图的样子; 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

搜索功能几乎按预期工作,但我注意到只按距离搜索(即在搜索字段中输入邮政编码并将其他两个字段留空)距离给定邮政编码不到一英里的出口不是从DB中检索。我无法弄清楚为什么会这样。

如果我在搜索表单中输入任何其他两个字段(名称菜单 AND 的有效邮政编码,而不是<将检索strong>所有匹配记录,包括距离不到一英里的记录。我无法弄清楚为什么在前一种情况下没有发生这种情况。

以下是仅输入postccode的查询; 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 ) ) ) )';

0 个答案:

没有答案
相关问题