0

我正在尝试从我的数据库中选择用户 10 英里半径范围内的企业。测试表明问题出在我的查询中(尽管没有引发 MySQL 错误)。变量 $lat 和 $lng 是从 Javascript 导入的,它们也很好。我怀疑这个问题与我使用 BETWEEN 有关,因为这是我第一次使用它。有任何想法吗?

$r = 20; // in miles
$lat_min = $lat - ($r / 69);
$lat_max = $lat + ($r / 69);
$lng_min = $lng - $r / abs(cos(deg2rad($lat)) * 69);
$lng_max = $lng + $r / abs(cos(deg2rad($lat)) * 69);

$query = "SELECT name FROM businesses WHERE $lat BETWEEN $lat_min AND $lat_max $lng BETWEEN $lng_min AND $lng_max ORDER BY Rand() LIMIT 6";
4

6 回答 6

8

查询应该是:

  SELECT name FROM businesses 
  WHERE THE_ACTUAL_NAME_OF_THE_COLUMN BETWEEN $lat_min AND $lat_max 
  AND THE_NAME_OF_THE_NEXT_COLUMN BETWEEN $lng_min AND $lng_max 
  ORDER BY Rand() LIMIT 6

不知何故,$lat 看起来不像表中的列名。你也错过了一个AND。

于 2011-07-06T14:56:14.517 回答
1

看起来你有你失踪了,AND例如

SELECT 
   name
FROM
   businesses
WHERE
  $lat BETWEEN $lat_min AND $lat_max
  AND $lng BETWEEN $lng_min AND $lng_max
ORDER BY Rand() LIMIT 6
于 2011-07-06T14:56:49.703 回答
1
$query = "SELECT name FROM businesses WHERE $lat BETWEEN $lat_min AND $lat_max AND $lng BETWEEN $lng_min AND $lng_max ORDER BY Rand() LIMIT 6";
于 2011-07-06T15:00:12.627 回答
1

就像其他答案一样,并且可以肯定的是,放置()。

$query = 'SELECT name 
FROM businesses 
WHERE 
('.$lat.' BETWEEN "'.$lat_min.'" AND "'.$lat_max.'")
AND ('.$lng.' BETWEEN "'.$lng_min.'" AND "'.$lng_max.'")
ORDER BY Rand() LIMIT 6";
于 2011-07-06T15:00:37.767 回答
0

假设 $lat 和 $lng 解析为实际的列名,我认为您只是缺少一个“AND”。有时,仅仅格式化 SQL 语句就可以揭示问题。

SELECT name 
  FROM businesses 
  WHERE $lat BETWEEN $lat_min AND $lat_max 
    **AND** $lng BETWEEN $lng_min AND $lng_max 
ORDER BY Rand() LIMIT 6;
于 2011-07-06T14:57:28.227 回答
0

我认为您需要在 WHERE 子句中使用 AND ......

WHERE ($lat BETWEEN $lat_min AND $lat_max) AND ($lng BETWEEN $lng_min AND $lng_max)

于 2011-07-06T14:58:02.197 回答