php - 如何与 MySQL 比较(最小和最大)浮点值?

标签 php mysql geolocation comparison

我有一个包含lonlat地理位置数据的数据库。 两者都保存为 中的 float/decimal 属性。表。

现在我想比较这些东西,例如:

(u.user_location_lat <= ".$lat_max." AND u.user_location_lat >= ".$lat_min.") AND
(u.user_location_long <= ".$long_max." AND u.user_location_long >=".$long_min.")

但它没有显示任何结果(它应该!) - 但也没有错误。

如何轻松解决这个问题(我实际上不想使用空间索引 - 至少我不明白该怎么做)?

谢谢。

最佳答案

我建议您在进行变量替换后验证该语句的外观。

也就是说,在准备/执行 SQL 语句之前,echovardump 包含 SQL 文本的变量的内容。

谓词的形式似乎没有任何问题。 (这些可以使用等效的 BETWEEN 比较器来编写,但这不是您编写的问题。)

您可能交换了 minmax 值,或者交换了经度和纬度。如果这不是问题,那么我怀疑被替换的变量可能以科学计数法表示,而不是十进制值。

例如生成 SQL 文本

  ...  u.lat <= 1.241E+2 ...

而不是

  ...  u.lat <= 124.1 ... 

在前一种情况下,MySQL 会将该文字计算为十进制值 1.241。

(当边界框跨越 +180/-180 边界时,会出现一个极端情况问题,但我不认为这对于您的大多数值来说可能是一个问题,这将是一个异常(exception)情况,您可能会这样做需要设置特殊的测试用例才能真正发生。)

为了调试此问题,您需要准备/执行发送到数据库的实际 SQL 文本。

(您的问题中没有足够的信息来确定实际问题。)

<小时/>

问:如何获取实际的 SQL 文本?

A:将 SQL 语句构建为字符串到变量中;然后var_dump该变量进行调试:

$sqltext = "SELECT ... WHERE u.lat <= ". $lat_max . " AND u.lat ... ";
var_dump($sqltext);
$stmt = mysqli_prepare($db, $sqltext);

关于php - 如何与 MySQL 比较(最小和最大)浮点值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18669286/

相关文章:

php - php 到底如何检查括号中的 bool 值

mysql - 客户数据库及其 PW 与每个客户的用户帐户 银行 WEB APP

mysql - PostgreSQL - 如何使用?

ios - 如何使用 Firestore Geopoint for Social Media app (swift Xcode) 获取基于位置的帖子

geolocation - IP本地化: mapping ip->location fixed over time?

asp.net-mvc - 在asp.net mvc中根据地理位置限制用户

PHP - 检查一个字符串是否包含另一个字符串中的任何字符

php - 单击按钮/链接将数据保存到数据库

javascript - 即使没有找到记录,也返回所有参数

php - 使用 jQuery 获取日期并使用 PHP 表单将其保存到 MySQL