2015-07-21 2 views
0

У меня есть две таблицы:подзапросов в нескольких WHERE заявления в SQL

Place 
-id 
-latitude 
-longitude 

Event 
-id 
-user_id 
-latitude 
-longitude 
-radius 

мне нужно иметь в качестве вывода списка user_id, который был в месте. Я не уверен, что могу сделать это, используя подзапрос, так как мне нужно одновременно проверить два параметра: широту (+ - радиус) и долготу (+ - радиус).

Допуская, что радиус всегда 1, чтобы упростить задачу, он дает этот запрос:

SELECT * FROM event WHERE 
latitude > (SELECT latitude-1 FROM place) AND 
latitude < (SELECT latitude+1 FROM place) AND 
longitude > (SELECT longitude-1 FROM place) AND 
longitude < (SELECT latitude+1 FROM place) 

которая не потому, что подзапрос не может возвращать более одной строки. Каков правильный способ сделать это?

+0

@Siyual Я согласен. Я попробую и вернусь с первых результатов. Я был немного ленив на этом. – poiuytrez

+0

Я добавил запрос. – poiuytrez

+0

Где находится "точность"? –

ответ

2

насчет просто (я должен поставить дефицитные кавычки, что я не MySQL или данные, чтобы проверить это ...)

select distinct 
    place.id, 
    user_id 
from 
    event 
    inner join place on 
     event.latitude between 
      place.latitude - event.radius 
      and place.latitude + event.radius 
     and event.latitude between 
      place.longitude - event.radius 
      and place.longitude + event.radius; 
+0

Работает без кавычек. – poiuytrez

+0

Отлично, спасибо за подтверждение :) –

Смежные вопросы