经度和纬度

时间:2017-04-25 10:35:00

标签: sql database self-join

我正在使用mySQL,我的表的列如下:

POST_ID,meta_id,meta_value,meta_key

虚拟数据附加为:

IMAGE

我希望数据符合纬度必须在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_ids的纬度在60到60.4之间,经度在8到9之间。

以下是我的数据表:

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

2 个答案:

答案 0 :(得分:0)

或者条件只是作为工会声明。因此,如果您使用以下查询

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  )

答案 1 :(得分:0)

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  )

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