Повторное использование нескольких переменных в предложении WHERE - PullRequest
0 голосов
/ 21 марта 2012

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

Обратите внимание, пожалуйста, игнорируйте ... как я разбил поле строки карты, 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.

1 Ответ

0 голосов
/ 21 марта 2012

Я не в состоянии проверить это, так что, надеюсь, кто-нибудь разрешит любые синтаксические ошибки в случае их возникновения.

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