Pregunta

Suponiendo una tabla de postes que contiene zip como varchar(10) Quiero obtener todos los resultados que coincidan con una cremallera específica o extender mis resultados con entradas cercanas a la consulta en caso de que no haya suficientes resultados. Decir:

Un usuario busca zip "56500" y mi conjunto de resultados devuelve 2 elementos con una coincidencia exacta. En este caso quiero realizar una especie de like consulta que encuentra entradas "565%". Eventualmente necesito ejecutar esto en una consulta.

¿Alguna sugerencia?

¿Fue útil?

Solución

Algo como esto podría ser lo que quieres:

SELECT …
FROM atable
WHERE zip = @zip

UNION ALL

SELECT …
FROM atable
WHERE NOT EXISTS (
  SELECT *
  FROM atable
  WHERE zip = @zip
)
  AND zip LIKE CONCAT(LEFT(@zip, 3), '%')

Esta puede no ser la solución más eficiente, pero al menos es una sola consulta, por lo que podría funcionar bien como punto de partida.

Otros consejos

ORDER BY el delta del deseado zip?

Entonces, esto no es específicamente para PostgreSQL, en realidad fue escrito para MySQL originalmente, pero debería funcionar. Encontré este artículo hace un tiempo que mostraba cómo crear una base de datos que contenga códigos postales y latitud/longitud para cada código postal, luego usando trigonometría para calcular la distancia entre los códigos postales. Eche un vistazo al enlace. Estoy seguro de que te ayudará ...

http://www.chrissibert.com/blog/2009/06/16/mysql-zip-codes-latitude-longitude-distance/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top