对于项目,我将位置点存储在MySQL数据库中。每个点的纬度和经度数据存储为varchar。它必须保持varchar,因为我不会进入。对于每个新点,我正在尝试执行搜索以查看我的数据库中是否已经在新点的.000300纬度/经度半径内有任何点。
我的PHP代码如下:($ lat和$ long是新点的纬度和经度)
$lat1 = $lat - 0.000300;
$lat2 = $lat + 0.000300;
$long1 = $long - 0.000300;
$long2 = $long + 0.000300;
$sql = "SELECT * FROM `DataBase`.`DataBase_data` WHERE `DataBase_data`.`Type`='Point' AND `DataBase_data`.`Lat`>'$lat1' AND `DataBase_data`.`Lat`<'$lat2' AND `DataBase_data`.`Long`>'$long1' AND `DataBase_data`.`Long`<'$long2'";
$query = mysql_query($sql);
echo mysql_error();
当纬度和经度都是正数时,代码可以正常工作。但是,当它们中的一个(或两个)是负数时,搜索不起作用。我认为它与使用包含-符号的varchar进行“大于”和“小于”比较有关,但我并不积极。任何有关如何解决问题的想法将不胜感激。
答案 0 :(得分:2)
这是您的查询
SELECT d.*
FROM `DataBase`.`DataBase_data` d
WHERE d.`Type`='Point' AND d.`Lat`> '$lat1' AND d.`Lat`<'$lat2' AND
d.`Long`>'$long1' AND d.`Long`<'$long2';
我的第一个建议是将比较作为数字。您可以通过添加0来轻松地在MySQL中转换为数字:
SELECT d.*
FROM `DataBase`.`DataBase_data` d
WHERE d.`Type` = 'Point' AND (d.`Lat` + 0) > $lat1 AND (d.`Lat` + 0) < $lat2 AND
(d.`Long` + 0) > $long1 AND (d.`Long` + 0) < $long2;
这可以解决您的问题吗?