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
Это не красиво, но это должно работать.