我有一个包含公司及其邮政编码地址的数据库。我创建了一个函数,可以为我提供一定范围内的公司名称。但是,我在MYSQL上非常糟糕,并且查询部分无效。我研究了这个网站的功能,如果正确执行,我认为可以正常工作。我一直收到错误,说结果2是假的。在$ sql =?
之后,有人可以帮我弄清楚我的语法有什么问题吗? function zipcodeRadius($lat, $lon, $radius)
{
$radius = $radius ? $radius : 20;
$lat = intval($lat);
$lon = intval($lon);
$radius = intval($radius);
$sql = "SELECT company,( 3959 * ACOS(COS(RADIANS($lat) ) * COS(RADIANS( lat ) ) * COS( RADIANS( longitude ) - RADIANS($lon) ) + SIN(RADIANS($lat) ) * SIN(RADIANS( lat ) ) ) ) AS distance FROM COMPANY WHERE distance < 50 ORDER BY distance";
$result2 = mysql_query($sql);
while($row2= mysql_fetch_array($result2))
{
echo $row2[company]. " - ". $row2[zip];
echo "<br/>";
}
}
答案 0 :(得分:1)
添加
if (!$result) { print mysql_error();}
在mysql_query之后
答案 1 :(得分:1)
您的查询:
SELECT company,
(complex calculations) AS distance
FROM COMPANY
WHERE distance < 50
ORDER BY distance ;
问题是distance
列表中SELECT
被定义(作为别名),并且WHERE
子句中不能引用这些别名。这就是SQL的处理方式。你有两个解决方案。
将查询封装在外部查询中并将WHERE
移到那里:
SELECT company,
distance
FROM
( SELECT company,
(complex calculations) AS distance
FROM COMPANY
) AS tmp
WHERE distance < 50
ORDER BY distance ;
或复制计算代码:
SELECT company,
(complex calculations) AS distance
FROM COMPANY
WHERE (complex calculations) < 50
ORDER BY distance ;
答案 2 :(得分:0)
$sql = "SELECT company,( 3959 * ACOS(COS(RADIANS($lat) ) * COS(RADIANS(
$ lat )) * COS( RADIANS( longitude ) - RADIANS($lon) ) + SIN(RADIANS($lat) ) * SIN(RADIANS(
$ lat {{1} }
检查查询中使用的变量名称$ lat - 我已经更正了该部分(以粗体斜体字体显示)。 尝试一下,如果它适合你