MySQL查询以确定数字是否大于包含负值的VARCHAR

时间:2014-01-25 20:56:58

标签: php mysql web

对于项目,我将位置点存储在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进行“大于”和“小于”比较有关,但我并不积极。任何有关如何解决问题的想法将不胜感激。

1 个答案:

答案 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;

这可以解决您的问题吗?