Postgres найти почтовые индексы рядом с конкретным почтовым индексом - PullRequest
4 голосов
/ 01 декабря 2011

Предполагая таблицу Postgres, содержащую zip как varchar(10) Я хочу получить все результаты, соответствующие определенному почтовому индексу, или расширить мои результаты записями, близкими к запрашиваемому, в случае, если результатов недостаточно.Скажем:

Пользователь ищет zip "56500", и мой набор результатов возвращает 2 элемента с точным соответствием.В этом случае я хочу выполнить запрос типа like, который находит записи "565%".В конце концов мне нужно выполнить это в одном запросе.

Есть предложения?

Ответы [ 3 ]

0 голосов
/ 02 декабря 2011

Итак, это не специально для PostgreSQL - изначально оно было написано для MySQL - но оно должно работать.Недавно я наткнулся на эту статью, в которой показано, как создать базу данных, содержащую почтовые индексы и широту / долготу для каждого почтового индекса, а затем использовать тригонометрию для расчета расстояния между почтовыми индексами.Посмотрите на ссылку.Я уверен, что это поможет вам ...

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

0 голосов
/ 02 декабря 2011

Нечто подобное может быть тем, что вы хотите:

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), '%')

Возможно, это не самое эффективное решение, но, по крайней мере, это один запрос, поэтому он вполне может стать отправной точкой.

0 голосов
/ 01 декабря 2011

ORDER BY дельта от желаемого zip?

...