代码之家  ›  专栏  ›  技术社区  ›  Dixon Chaudhary

在SQL查询和中使用“<”符号时遇到的问题

  •  0
  • Dixon Chaudhary  · 技术社区  · 7 年前

    当我试图在SQL查询中使用带和条件的<符号时,我遇到了问题。

       WHERE (latitude - 0.009 < AND latitude + 0.00 >)
               AND (longitude - 0.009 < 
                    AND longitude + 0.009 > )
    

    下面是我在corepp中的代码:

    <?php
    ini_set("display_errors", 0);
    
    $lat = $_REQUEST['latit'];
    $long = $_REQUEST['longit'];
    
    include ("commanvar.php");
    include ("class.db.php");
    
    $coordinates_ = '';
    
    // function to calculate distance between two latitudes and longitudes
    function distance($lat1, $lng1, $lat2, $lng2, $miles = true)
    {
        $pi80 = M_PI / 180;
        $lat1 *= $pi80;
        $lng1 *= $pi80;
        $lat2 *= $pi80;
        $lng2 *= $pi80;
    
        $r = 6372.797; // mean radius of Earth in km
        $dlat = $lat2 - $lat1;
        $dlng = $lng2 - $lng1;
        $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
        $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
        $km = $r * $c;
    
        return ($miles ? $km * 0.621371192 : $km);
    }
    
    $obj = new db_connect();
    
    // added by pramod
    
    $sql = "SELECT name,
           latitude,
           longitude,
           TYPE
      FROM (SELECT name,
                    TO_BINARY_FLOAT(latitude) latitude,
                    TO_BINARY_FLOAT(longitude) longitude,
                   TYPE
              FROM (SELECT name,
                           latitude,
                           longitude,
                           TYPE,
                           is_number (latitude) latisnum,
                           is_number (longitude) longisnum
                      FROM (SELECT name,
                                   REGEXP_SUBSTR (latlon,
                                                  '[^,]+',
                                                  1,
                                                  1)
                                      latitude,
                                   REGEXP_SUBSTR (latlon,
                                                  '[^,]+',
                                                  1,
                                                  2)
                                      longitude,
                                   TYPE
                              FROM (SELECT olt.name,
                                           olt_details.latlon,
                                           'olt' AS TYPE
                                      FROM ftth.olt, ftth.olt_details
                                     WHERE olt_id = id
                                    UNION
                                    SELECT name, latlon, TYPE FROM ftth.splitters
                                    ))
                     WHERE latitude IS NOT NULL AND longitude IS NOT NULL)
             WHERE latisnum = 1 AND longisnum = 1)
     WHERE (latitude - 0.009 < $lat
            AND latitude + 0.00 > $lat)
           AND (longitude - 0.009 < $long
                AND longitude + 0.009 > $long)";
    //die();
    
    $obj->db_query($sql);
    
    // echo $sql;
    
    // echo $lat . ',' . $long;
    // define json array coordinates and prepare it's elements for returning via AJAX
    
    $coordinates = '{
    "coordinates": [';
    
    while ($result = $obj->db_fetch_array(1)) {
    
        $latitude = $result['LATITUDE'];
        $longitude = $result['LONGITUDE'];
        $name = $result['NAME'];
        $type = $result['TYPE'];
    
        $latlon_fiber = $result['LATITUDE'] . ", " . $result['LONGITUDE'];
    
        $distance_fromswitch = distance($lat, $long, $latitude, $longitude, FALSE);
        $distance_fromswitch = floor($distance_fromswitch * 1000);
    
        $coordinates_ .= '{ "distance":"' . $distance_fromswitch . '" ,"site_name":"' . $name . '" , "latitude":"' . $latitude . '" , "longitude":"' . $longitude . '" , "device_type":"' . $type . '" },';
    }
    
    $coordinates .= rtrim($coordinates_, ',');
    
    $coordinates .= "]}";
    
    echo $coordinates;
    $obj->free();
    ?>
    

    由于这个部分,我得到了以下错误 <和 在线 其中(纬度-0.009<和纬度+0.00>)

    ORA-00936: missing expression
    00936. 00000 -  "missing expression"
    

    我想我在使用时使用了一些不正确的语法 <使用和 在线 其中(纬度-0.009<和纬度+0.00>)

    这里需要做什么修正?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Maciej Los    7 年前

    想想看!错误消息是不言而喻的。

    你想把减法的结果和什么都不做比较。要更正此问题,必须将其更改为:

    WHERE (latitude - 0.009 < SomeValueHere AND latitude + 0.00 > SomeValueHere)
    

    有关详细信息,请参阅: ORA-00936 missing expression

    [编辑]

    关于问题中所做的更改…

    您在请求调试(检查)代码方面的帮助。让我引用你的评论:

    可能变量没有任何值,并且传递为空 查询中的字符串..艾斯 skybunk

    谢谢,@skybunk!