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  )

这是我为解决我的问题而实施的解决方案