-2

会社とその郵便番号の住所を含むデータベースがあります。特定の半径内にある会社の名前を表示する関数を作成しました。ただし、MYSQL が非常に苦手で、クエリ部分が機能していません。このサイトから機能を調査しましたが、正しく実行されれば機能すると思われます.results2がfalseであるというエラーが表示され続けます. $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 の処理方法です。2 つの解決策があります。

クエリを外部クエリにカプセル化し、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 に答える