Среди не предоставленной информации есть связь между таблицами кемпингов и маркеров. Нам понадобится эта информация, чтобы знать, как присоединиться к таблицам.
Кроме того, для HAVING требуется GROUP BY (он работает как предложение WHERE для агрегированных результатов GROUP BY). Если вы не агрегируете строки в маркерах, вам нужно ГДЕ, а не HAVING.
В предположении, вы хотите что-то вроде этого:
SELECT id (expression) as distance FROM markers
WHERE distance < 25 AND
campground_id IN (SELECT id FROM campgrounds WHERE type = 'private' AND wifi = 1)
РЕДАКТИРОВАТЬ: Отражение новой информации, что есть только одна таблица.
Вы не можете использовать столбцы ALIAS в предложении WHERE. Я предполагаю, что вы это знаете, а также знаете, что вы можете использовать их в HAVING, поэтому вы пытаетесь заменить HAVING вместо WHERE. Для этого вам нужно переписать запрос GROUP BY:
SELECT campgroundid, name, private, wifi,
( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) *
cos( radians( lng ) - radians(-122) ) +
sin( radians(37) ) * sin( radians( lat ) ) ) )
AS distance
FROM campground
GROUP BY campgroundid
HAVING distance < 25 AND type='private' AND wifi = 1
ORDER BY distance LIMIT 0 , 20;
Это будет работать до тех пор, пока campgroundid является уникальным (поскольку другие значения будут получены из единственной записи для этого идентификатора).