SQL с несколькими предложениями Where

Во-первых, я прочитал около 7 страниц постов с похожими заголовками, но не смог найти правильного представления о своем вызове

Мой SQL:

SELECT name, address, lat, lng, city, state, phone, zip, info
    , ( 3959 * acos( cos( radians('37.4969') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-122.2674') ) + sin( radians('37.4969') ) * sin( radians( lat ) ) ) ) AS distance 
FROM myhealthfinder_map 
HAVING distance < '50'  and location = '2'  
ORDER BY distance LIMIT 0 , 10

Я получаю сообщение об ошибке: Неверный запрос: Неизвестный столбец "местоположение" в "имеющем предложение"

если вместо HAVING я просто делаю это WHERE location = '2', тогда он работает нормально [находит столбец] (но мне нужен селектор расстояния).

Любое предложение о том, как снести это?

2 ответа

Решение

Используйте как ГДЕ, так и ЕСТЬ. HAVING используется для агрегированных и рассчитанных столбцов. А также WHERE на простых старых колоннах.

SELECT name, address, lat, lng, city, state, phone, zip, info
    , ( 3959 * acos( cos( radians('37.4969') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-122.2674') ) + sin( radians('37.4969') ) * sin( radians( lat ) ) ) ) AS distance 
FROM myhealthfinder_map 
WHERE location = '2' 
HAVING distance < '50'  
ORDER BY distance LIMIT 0 , 10

Больше объяснения можно найти здесь ГДЕ против

Не использовать HAVING без GROUP BY, Вы можете попробовать это вместо

SELECT name, address, lat, lng, city, state, phone, zip, info, ( 3959 * acos( cos( radians('37.4969') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-122.2674') ) + sin( radians('37.4969') ) * sin( radians( lat ) ) ) ) AS distance 
  FROM myhealthfinder_map 
 WHERE location = '2' AND
( 3959 * acos( cos( radians('37.4969') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-122.2674') ) + sin( radians('37.4969') ) * sin( radians( lat ) ) ) ) < 50
 ORDER BY distance LIMIT 0 , 10

Это не красиво, но это должно работать.

Другие вопросы по тегам