2012-03-21 15 views
0

緯度と経度の両方を保持する単一のmapフィールドがセミコロンで区切られています。私がしなければならないことは、2つを分けて、別の与えられた緯度と経度から計算してその差を計算することです。WHERE節内で複数の変数を再利用する

注意してください...マップ文字列フィールド、b.id = a.id、および私が緯度と経度で行っている計算をどのように分割しているのですか。ここでは重要ではありません。

WHERE 

/* Here's where I get the values for lat and long from the map field */ 
(
    SELECT 
    /* lat from map field */ as lat, 
    /* long from map field */ as long 
FROM some_table AS b 
    WHERE b.id = a.id AND b.key = 'map' 
) 

/* Here's where I use them to do some calculations... */ 
lat <= (" . ($lat + $radius/40075) . ") 
AND lat >= (" . ($lat - $radius/40075) . ") 
AND long <= (" . ($long + $radius/40075) . ") 
AND long >= (" . ($long - $radius/40075) . ") 

私は、これは動作しません知っているが、私はそれ私がlatlongを使用するので、私はマップ値を再選択していないよ毎回行う方法を知っているように思います。

+0

2番目の表記です。私はあなたの質問を誤解したと思います。あなたは一見した:http://dev.mysql.com/doc/refman/5.0/en/user-variables.html –

+0

私はあなたの質問を理解していない。 SQLの 'lat'はあなたのPHP変数' $ lat'とは異なる変数ですか? – staticsan

答えて

0

私はこれをテストする立場にはいないので、誰かが文法エラーが発生した場合に解決することを願っています。

SELECT SUBST(map, 1, STRPOS(map, ",") - 1) AS lat, SUBSTR(map, STRPOS(map, ",")) AS long 
FROM some_table 
WHERE 
    lat BETWEEN ($lat - $radius/40075) AND ($lat + $radius/40075) 
AND 
    long BETWEEN ($long - $radius/40075) AND ($long + $radius/40075) 
関連する問題