2014-10-14 3 views
0

У меня есть таблица таблиц Флористов MySQL, и я пытаюсь написать функцию поиска, которая возьмет Zipcode в качестве входа и найдет всех Флористов, которые доставляют этот почтовый индекс. Каждый флорист запись в моей таблице имеет 3 пунктовБыстрый поиск по zipcode в MySql

  • геокодированных долготы (в центре по адресу цветочницы)
  • геокодированной широты (в центре по адресу цветочницы)
  • строки поле townnames и Почтовых индексов где флориста поставляет например - Бостон (02215, 02108, 02109), Челси (02150), Сомервилль (02143, 02144, 02145)

Допустим, я хочу, чтобы найти все флористы, которые доставляют в "02108". Каков наилучший способ реализации этого поиска в MySQL?

Я думал

  1. Точный поиск матча - но это потребовало бы каждый поиск, чтобы сканировать всю таблицу. Неэффективное?

  2. Haversine поиск + Четк.совп - Используйте latitutde/значение долготы, чтобы сузить поиск до радиуса в 15 миль

    MySQL Great Circle Distance (Haversine formula) А затем выполнить точное совпадение в этих результатах.

  3. Что-то еще?

Поблагодарите ваши мысли и пожелания.

+0

У вас есть возможность добавить дочерний стол в число от 1 до многих из идентификаторов флориста и почтовых индексов? Это сделает ваш поиск намного более эффективным. – gmiley

+0

В какой-то момент вы собираетесь прочитать полный стол, чтобы сузить результаты. Наиболее экономичным кажется «LIKE» на поле zipcode/city. 'SELECT * FROM table WHERE , например '% %''. Выполнение Haversine на все, что сузить, прежде чем делать «LIKE», - это большая часть обработки. – JNevill

+0

Спасибо, gmiley и JNevill за ваш быстрый ответ. Я согласен, что ребенок или стол перехода - это путь сюда. – rogerb

ответ

1

Правильный способ состоит в том, чтобы представлять список почтовых индексов в виде соединительной таблицы с одной строкой для каждого флориста и одной строкой за почтовый индекс. Итак, ваша первая флорист может иметь следующие строки:

FloristId Zip 
1   02215 
1   02108 
1   02109 
1   02150 
1   02143 
1   02144 
1   02145 

Затем построить индекс на zip колонке. Затем вы можете использовать простое соединение, чтобы получить флористов, которые доставляют определенный почтовый индекс.

У вас может быть справочная таблица для поиска основного города для почтового индекса. Бюро переписи США имеет картографирование из областей таблиц почтового индекса в названия городов. У USPS, вероятно, есть нечто подобное.

+0

Спасибо Гордон. Я думаю, что то, что вы предлагаете, имеет смысл. Спасибо за ваш быстрый ответ! – rogerb

+0

Однако вы его реализуете - старайтесь избегать пятизначного почтового индекса. Пользователи, у которых есть ведущие нули, часто не предоставляют их, поэтому убедитесь, что вы справитесь с вариантами использования «803» и «2145». –

+0

@AlMills. , , В Соединенных Штатах люди всегда обеспечивают ведущие нули (по крайней мере, по моему опыту). Возможно, это часть этой национальной психики, но почтовые индексы составляют пять цифр (если они не являются девятью цифрами). –

Смежные вопросы