SQL查询经纬度满足条件
SQL Query meeting condition on longitude AND latitude
我正在使用 mySQL,我的 table 的列如下:
post_id,meta_id,meta_value,meta_key
附加虚拟数据为:
我要满足纬度必须在60到60.5之间的条件的数据
经度必须在 8 到 9 之间。
我正在使用以下 where 子句:
SELECT *
FROM domenposts
LEFT JOIN domenpostmeta ON domenposts.id=domenpostmeta.post_id
WHERE ( domenpostmeta.meta_key = 'longitude' AND domenpostmeta.meta_value BETWEEN 8 AND 9 )
OR ( domenpostmeta.meta_key = 'latitude' AND domenpostmeta.meta_value BETWEEN 60 AND 60.5 )
这是可行的,但根据我的逻辑,必须在导致零行的条件之间使用 AND 而不是 OR。
我需要帮助来解决这个问题。
需要输出:
所有 post_id 的纬度在 60 到 60.4 之间,经度在 8 到 9 之间。
这是我 table 的数据:
postid metaid meta_key meta_value
1109 109 longitude 8.2135
1108 109 latitude 60.4029
1002 239 longitude 9
1080 241 latitude 70
1051 5 latitude 60
1001 239 latitude 62
or 条件只是作为联合语句。因此,如果您使用以下查询
select * from domenposts where (meta_key='lattitude' and meta_value Between 60 and 64)
union
select * from domenposts where (meta_key='longitude' and meta_value Between 8 and 9)
这等同于您编写的有效声明
SELECT * FROM domenposts
LEFT JOIN domenpostmeta ON domenposts.id=domenpostmeta.post_id
WHERE (domenpostmeta.meta_key = 'longitude' AND domenpostmeta.meta_value BETWEEN 8 AND 9 ) OR ( domenpostmeta.meta_key = 'latitude' AND domenpostmeta.meta_value BETWEEN 60 AND 60.5 )
SELECT * FROM domenposts
LEFT JOIN domenpostmeta p1 ON domenposts.id=p1.post_id
LEFT JOIN domenpostmeta p2 ON p1.post_id = p2.post_id
WHERE (p1.meta_key = 'longitude' AND p1.meta_value BETWEEN 8 AND 9 ) OR ( p2.meta_key = 'latitude' AND p2.meta_value BETWEEN 60 AND 60.5 )
这是我为解决我的问题而实施的解决方案
我正在使用 mySQL,我的 table 的列如下:
post_id,meta_id,meta_value,meta_key
附加虚拟数据为:
我要满足纬度必须在60到60.5之间的条件的数据 经度必须在 8 到 9 之间。
我正在使用以下 where 子句:
SELECT *
FROM domenposts
LEFT JOIN domenpostmeta ON domenposts.id=domenpostmeta.post_id
WHERE ( domenpostmeta.meta_key = 'longitude' AND domenpostmeta.meta_value BETWEEN 8 AND 9 )
OR ( domenpostmeta.meta_key = 'latitude' AND domenpostmeta.meta_value BETWEEN 60 AND 60.5 )
这是可行的,但根据我的逻辑,必须在导致零行的条件之间使用 AND 而不是 OR。 我需要帮助来解决这个问题。
需要输出: 所有 post_id 的纬度在 60 到 60.4 之间,经度在 8 到 9 之间。
这是我 table 的数据:
postid metaid meta_key meta_value
1109 109 longitude 8.2135
1108 109 latitude 60.4029
1002 239 longitude 9
1080 241 latitude 70
1051 5 latitude 60
1001 239 latitude 62
or 条件只是作为联合语句。因此,如果您使用以下查询
select * from domenposts where (meta_key='lattitude' and meta_value Between 60 and 64)
union
select * from domenposts where (meta_key='longitude' and meta_value Between 8 and 9)
这等同于您编写的有效声明
SELECT * FROM domenposts
LEFT JOIN domenpostmeta ON domenposts.id=domenpostmeta.post_id
WHERE (domenpostmeta.meta_key = 'longitude' AND domenpostmeta.meta_value BETWEEN 8 AND 9 ) OR ( domenpostmeta.meta_key = 'latitude' AND domenpostmeta.meta_value BETWEEN 60 AND 60.5 )
SELECT * FROM domenposts
LEFT JOIN domenpostmeta p1 ON domenposts.id=p1.post_id
LEFT JOIN domenpostmeta p2 ON p1.post_id = p2.post_id
WHERE (p1.meta_key = 'longitude' AND p1.meta_value BETWEEN 8 AND 9 ) OR ( p2.meta_key = 'latitude' AND p2.meta_value BETWEEN 60 AND 60.5 )
这是我为解决我的问题而实施的解决方案