2011-07-06 5 views
0

私は自分のデータベースから、ユーザーの半径10mi以内にあるビジネスを選択しようとしています。テストは問題が私のクエリにあることを示しています(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

私は...あなたがAND WHERE句に必要だと思う

WHERE($ BETWEEN lat_min $と$ lat_max LAT)AND($のlng_minと$ lng_max BETWEEN $の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

他の答えと同様、place()も同様です。

$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"; 
関連する問題