Estoy usando mySQL y las columnas de mi tabla son las siguientes:

post_id, meta_id, meta_value, meta_key

Los datos ficticios se adjuntan como:

IMAGE

Quiero datos que cumplan la condición de que la latitud debe estar entre 60 y 60.5 y la longitud debe estar entre 8 y 9.

Estoy usando la siguiente cláusula 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 ) 

Lo que funciona, pero de acuerdo con mi lógica, debe tener Y en lugar de OR entre las condiciones que resultan en cero filas. Necesito ayuda para resolver este problema.

SALIDA REQUERIDA: Todos los post_ids que tienen latitud entre 60 y 60.4 Y longitudes entre 8 y 9.

Aquí están mis datos para la tabla:

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
-1
Faizan Zahid 25 abr. 2017 a las 13:35

2 respuestas

La mejor respuesta
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  )

Esta es la solución que implementé para resolver mi problema.

0
Faizan Zahid 27 abr. 2017 a las 10:56

La condición o solo está actuando como una declaración de unión. Entonces, si usa la consulta a continuación

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) 

Que es equivalente a tu declaración que escribiste y que está funcionando

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  )
0
DevelopmentIsMyPassion 25 abr. 2017 a las 11:13