Вы можете сделать это только надежно (игнорируя потенциальную un -обеспеченность выполнения такого рода сопоставления диапазонов с почтовыми индексами), разделив части почтового индекса на разные столбцы по типу символов.
Я не знаю много о голландских почтовых индексах, но если ваши форматы правильные, вы можете создать таблицу вроде:
+-------+------+
| code | city |
+-------+------+
| 1234 | AA |
+-------+------+
Разделение почтовых индексов позволит вам выполнить более детальную сортировку.
Обновление:
Посмотрев страницу Википедии о голландских почтовых индексах , похоже, это должно работать для всех из них.Мои метки code
и city
хотя и неточны.
В сторону: я впечатлен тем, что в Нидерландах есть такой нормальный формат почтового индекса, в отличие от британского, где вам нужно огромное регулярное выражение длядаже решить, является ли формат действительным.
Обновление 2:
Ваша проверка будет работать и с символами, но вам будет лучше хранить почтовые индексы в отдельной таблице судостоверение личностиПриведенный выше пример был просто для того, чтобы показать разделение символов от чисел, так что вам действительно нужно:
mysql> select * from postcodes;
+------+-------+-------+
| id | part1 | part2 |
+------+-------+-------+
| 1 | 1234 | AA |
| 2 | 5678 | BB |
+------+-------+-------+
Когда вы сохраняете диапазоны, не храните почтовые индексы вв таблице ranges
хранится идентификатор записи в таблице postcodes
, например:
mysql> select * from ranges;
+-------------+---------------+-------------+
| region_code | postcode_from | postcode_to |
+-------------+---------------+-------------+
| 1 | 1 | 2 |
+-------------+---------------+-------------+
Эта запись говорит, что «область 1 составляет от 1234 AA до 5678 BB»
ДляНапример, я скажу, что почтовые индексы начинаются с 0001 AA, затем перемещаются к 0001 AB, вплоть до 0001 ZZ, затем 0002 AA и так далее.Это, очевидно, неправильно, но это демонстрирует теорию.Вам нужно заменить это на алгоритм, который вы используете, чтобы определить, как почтовые индексы увеличиваются и уменьшаются.
Когда вы хотите выяснить, "вписывается ли почтовый индекс 3456 XY в область 89?", Вы разделяете его на символи число, и проверьте, соответствуют ли значения диапазону.Используя мой алгоритм, я проверяю:
Числовая часть больше или меньше числовой части postcode_from
?
Если она больше, то она меньше числовой части postcode_to
?
Если вы удовлетворяете обоим условиям, проверьте буквы - это важный бит - сопоставление набора символов MySQL делает позволяет вам сказать "меньше BC
*1047*,вы можете иметь:
WHERE 'AB' < part2;
в вашем предложении WHERE
.
Используя этот метод, вы можете определить, какой из ваших регионов имеет начало и конец, которые соответствуют значению, которое вы 'повторное тестирование.
Это немного затянуто, но будет работать без каких-либо преобразований. Возможно, вам придется проверить, что используемая сортировка соответствует тому, как работает последовательность букв для определенного типа почтового индекса, который вы используете.Используем хотя.