所以我有一个 MySQL 数据库,其中包含美国境内的城市/县以及经度和纬度。
这是我们用来获取此示例中任何位置 10 英里以内结果的查询。
SELECT city, state,((ACOS(SIN('38.2966016' * PI() / 180) * SIN(lat * PI() / 180) + COS('38.2966016' * PI() / 180) * COS(lat * PI() / 180) * COS(('-77.634079'-lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance FROM zcta HAVING distance <= '10' ORDER BY distance ASC
当在 Sequel Pro 中测试结果按预期返回时:
Fredericksburg VA 4.5932632328546
Spotsylvania VA 6.1939678870939
Richardsville VA 6.8293644913069
Locust Grove VA 7.6479616882979
Hartwood VA 7.6509448009002
Fredericksburg VA 7.8178182509761
Fredericksburg VA 7.8328645163604
Fredericksburg VA 7.8499527233007
Fredericksburg VA 7.8832043684573
Fredericksburg VA 8.8620101042208
但是当插入到以下 Zend Framework 中时:
$db = $this->getAdapter();
$sql = "SELECT city, state,((ACOS(SIN('38.2965709' * PI() / 180) * SIN(lat * PI() / 180) + COS('38.2965709' * PI() / 180) * COS(lat * PI() / 180) * COS(('-77.6340366'-lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance` FROM `zcta` HAVING `distance`<='10' ORDER BY `distance` ASC";
//$sql = "SELECT city, state,((ACOS(SIN('".$lat."' * PI() / 180) * SIN(lat * PI() / 180) + COS('".$lat."' * PI() / 180) * COS(lat * PI() / 180) * COS(('".$lon."'-lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance` FROM `zcta` HAVING `distance`<='10' ORDER BY `distance` ASC";
$stmt = $db->query($sql);
$rows = $stmt->fetchAll();
return $rows;
我们得到结果(关闭订单)
Champlain, VA
Hustle, VA
Caret, VA
Tappahannock, VA
Loretto, VA
距离弗吉尼亚州尚普兰超过 39 英里。这是相同的查询,我什至在 shell 中对其进行了测试,并得到了与 Sequel Pro Fredericksburg 结果相同的结果。因此,我假设 Zend Framework 在查询数据库时发生了一些变化,因此是弗吉尼亚州尚普兰的结果。
我是 ZF 的新手,我是否缺少让 ZF 正确返回结果的东西?
最佳答案
从来没有听说过这个问题。您是否尝试从查询的整数/ float 中删除任何引号:
$sql = "SELECT city, state,((ACOS(SIN(38.2965709 * PI() / 180) * SIN(lat * PI() / 180) + COS(38.2965709 * PI() / 180) * COS(lat * PI() / 180) * COS((-77.6340366-lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance` FROM `zcta` HAVING `distance`<=10 ORDER BY `distance` ASC";
关于php - Zend Framework 改变 MySQL 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5006052/