2011-07-06 28 views
0

我试图从我的数据库中选择属于用户10米范围内的企业。测试表明,问题在于我的查询(尽管没有引发MySQL错误)。变量$ lat和$ lng是从Javascript导入的,它们也可以。我怀疑这个问题与我使用BETWEEN有关,因为这是我第一次使用它。有任何想法吗?我的MySQL查询有什么问题? (使用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"; 
+0

... WHERE 1 BETWEEN 2 AND 3'就是你基本上产生的东西。你不是在与一个领域进行比较,而是在对数字进行比较,这是毫无用处的。 –

回答

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。

+0

为了澄清,OP缺少'$ lat_max'和'$ lng'之间的AND':-) – Bojangles

+0

感谢您的回复。您称为THE_ACTUAL_NAME_OF_THE_COLUMN的字段是PHP变量而不是列。我如何解决这个问题? – Sebastian

+0

@sebastian变量是否包含字段的名称?在这种情况下,你没有问题。你可以连接变量到sql字符串中。 –

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 
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; 
+0

我不认为$ lat解析为列名称,它在前面的行中使用的方式... –

+0

好点 - 错过了它在顶部的使用。 – MikeTheReader

0

我认为你需要一个和WHERE子句中......

WHERE($ LAT介于$ lat_min和$ lat_max)AND(介于$ lng_min和$ lng_max $ LNG)

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"; 
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";