У меня есть две таблицы:
User
id
и
Region
id, userID, origin (Geometry('point')), radius (Double)
Пользователь имеет непосредственное отношение к региону.
Я хочу запросить всех пользователей, у которых есть регион, содержащий точку (широта и долгота). Чтобы определить contains
, если расстояние между данной точкой и region.origin
меньше region.radius
, тогда эта область содержит точку.
Я могу запрашивать только те регионы, которые содержат данную точку, например:
SELECT "id", "origin", "radius", "regionID", ST_Distance("origin", ST_MakePoint(?, ?), false) AS "distance"
FROM "regions" AS "region"
WHERE
ST_DWithin("origin", ST_MakePoint(lat, long), maxDistance, false) = true
AND
ST_Distance("origin", ST_MakePoint(lat, long), false) - radius <= 0
ORDER BY distance ASC
LIMIT 10;
Но я действительно хочу пользователей и регионы и не хочу опрашивать каждого пользователя индивидуально в зависимости от региона. Вот что у меня есть:
SELECT *
FROM user, regions as region
WHERE
user.id = region.userID
AND
ST_DWithin("origin", ST_MakePoint(lat, long), maxDistance, false) = true
AND
ST_Distance("origin", ST_MakePoint(lat, long), false) - radius <= 0
LIMIT 10;
С этим запросом я не получаю никаких результатов, по первому запросу я получаю результаты.