-2

我有一个包含公司及其邮政编码地址的数据库。我创建了一个函数,可以为我提供一定范围内的公司名称。但是,我的 MYSQL 非常糟糕,查询部分无法正常工作。我从这个网站研究了这个功能,如果正确执行,应该可以工作。我一直收到一个错误,说 results2 是错误的。有人可以帮我弄清楚我在 $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/>";
    }

    }
4

3 回答 3

1

添加

if (!$result) { print mysql_error();}

在 mysql_query 之后

于 2012-12-09T11:48:51.963 回答
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 ;
于 2012-12-09T11:54:07.387 回答
0

$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";

检查查询中使用的变量名称 $lat - 我已更正该部分(以粗斜体字体显示)。试试看,如果这对你有用

于 2012-12-09T11:45:30.377 回答