我正在使用mySQL,我的表的列如下:
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_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
答案 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 )
这是我为解决问题而实施的解决方案