2012-03-21 2 views
0

У меня есть одно поле map, которое содержит как широту, так и долготу, разделенные точкой с запятой. То, что мне нужно сделать, это разделить эти два, а затем выполнить вычисления с другой заданной широты и долготы, чтобы вычислить разницу.Повторное использование нескольких переменных в предложении WHERE

Обратите внимание, пожалуйста, игнорируйте ... как я разделил поле строки карты, b.id = a.id и вычисления, которые я делаю на lat и long. Здесь они не важны.

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) . ") 

Я знаю, что это не будет работать, но я хотел бы знать, как это сделать, так что я не повторно выбор значения карты каждый раз, когда я использую lat и long.

+0

на втором взгляде. Я думаю, что неправильно понял ваш вопрос. Вы посмотрели: http://dev.mysql.com/doc/refman/5.0/en/user-variables.html –

+0

Я не понимаю ваш вопрос. Является ли 'lat' в SQL другой переменной, чем ваша переменная 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) 
Смежные вопросы