我有两个表:
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;
通过此查询,我没有任何结果,在第一个查询中,我得到了结果。