Хорошо, поэтому я внедряю рекламную систему на своем сайте. В настоящее время я сохраняю координаты широты / долготы участника в зависимости от города, который они вводят при регистрации. Каждому объявлению будет также предоставлена возможность указывать географические координаты и указывать радиус в милях (хотя я также хотел бы указать параметр в км).
Sample tables
--------------users
user_id = 7
name = Charles
lat = xxxxxx.xx
lon = xxxxxx.xx
--------------ads
ad_id = 1121
advertiser_id = 42
ad_type = 728x90
proximity = 50
lat = xxxxxx.xx
lon = xxxxxx.xx
У меня есть этот фрагмент кода, который просматривает мою базу данных пользователей и возвращает пользователей, которые находятся на указанном расстоянии. Я полагаю, что могу отредактировать это так, чтобы оно работало для моих нужд. Однако вместо того, чтобы показывать всех пользователей на указанном расстоянии, я хочу показывать объявления, которые находятся на расстоянии, указанном самими объявлениями, поскольку один рекламодатель может указать близость, отличную от другой, и т. Д.
Вот исходный запрос о близости пользователей, который я использую:
SELECT users.user_id
, ( 3959 * acos( cos( radians('".$lat."') ) *
cos( radians( users.lat ) ) *
cos( radians( users.lng ) -
radians('".$lng."') ) +
sin( radians('".$lat."') ) *
sin( radians( users.lat ) )
) ) AS distance
FROM users
WHERE account_type = '1'
AND `active` = '1'
HAVING distance <= '".$dist."'"
Так что я думаю, что если я сначала создам запрос, чтобы получить объявления, которые соответствуют зоне и имеют требования близости, а затем выберите их широту / долготу и выберите географические координаты текущих пользователей, а затем ...... Я смогу Кажется, я не об этом. Затем я выполню несколько расчетов на основе разных настроек близости каждого объявления, соответствующего зоне. Если одно объявление хочет показывать людей в радиусе 100 миль, тогда расчет будет отличаться от того, кто хочет, чтобы его показ показывался только тем, кто находится в пределах 20 миль. Вероятно, есть более простой способ сделать это. Может ли это помочь создать приложение для построения запросов?
Может быть, что-то вроде этого?
SELECT ads.ad_id
, ( 3959 * acos( cos( radians('".$user_lat."') ) *
cos( radians( ads.lat ) ) *
cos( radians( ads.lng ) -
radians('".$user_lng."') ) +
sin( radians('".$user_lat."') ) *
sin( radians( ads.lat ) )
)) AS distance
FROM ads
WHERE ad_type = '728x90'
AND `active` = '1'
HAVING distance <= ads.proximity"