2011-07-06 29 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";