MYSQL语法混乱

时间:2012-12-09 11:32:21

标签: php mysql

我有一个包含公司及其邮政编码地址的数据库。我创建了一个函数,可以为我提供一定范围内的公司名称。但是,我在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/>";
    }

    }

3 个答案:

答案 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 - 我已经更正了该部分(以粗体斜体字体显示)。 尝试一下,如果它适合你