#php #mysql #sql
#php #mysql #sql
Вопрос:
Предыстория
Таблица со следующими столбцами и данными, такими как:
---------------------------------------------------------------------------------
| Address | AddressLine2 | AddressLine3 | Locality | District | State | Country |
---------------------------------------------------------------------------------
|Sector-12| | | | Faridabad| Har | IN |
| 311 | | | Sector 3| Faridabad| Har | IN |
|Sector-1,| | | | Faridabad| Har | IN |
|Plot 31 | | | Old Fari | Faridabad| Har | IN |
| | | |dabad | | | |
---------------------------------------------------------------------------------
Здесь я пытаюсь показать, что данные в Address, AddressLine2, AddressLine 3, Locality могут быть абсолютно случайными.
Требование
Определите текущее местоположение и найдите близлежащие школы в базе данных с указанными выше столбцами в таблице школ.
Процесс
Близлежащие школы расположены с использованием API Google, который возвращает названия школ вместе с их адресами.
Например, возвращенные данные:
Name: St. Albans School
Address: Sector 1, Old Faridabad, Faridabad, Har, IN
Ожидаемый результат:
Школа с адресом Sector-1
и местоположением как Old Faridabad
Район, штат и страна автоматически берутся с использованием текущего местоположения.
Для обработки остальной части адреса, что в настоящее время происходит, это школьный адрес, разнесенный на основе ,
, и создается запрос mysql, который использует IN
.
Пример запроса:
Select * from Schools where Address IN ('Sector-1', 'Sector 1', Sector- 1'. 'Old Faridabad', ...)
Однако проблема с IN query
:
— Если столбец адреса содержит строку, такую как "Sector-1,"
, совпадение с ошибкой.
Другой подход:
Select * from Schools where Address REGEX "Sector-1|Sector 1|Sector- 1|Old Faridabad|..."
Проблема с этим подходом, если адрес школы похож на: 314, сектор 19, Фаридабад. Разделение строки на основе ,
результатов в критериях поиска 314
в запросе. Следовательно, школа с адресом: 314, сектор 31, Фаридабад, также приведет к совпадению, хотя эти школы находятся далеко друг от друга.
Любые предложения о том, как написать запрос mysql, который помогает в выборе правильных школ.
ПРИМЕЧАНИЕ: Адрес также может содержать текст типа: "314, Sector 19"
вместе.
Комментарии:
1. почему бы просто не выбрать сектора в IN()??
where Address IN(SELECT address from Schools)
2. Я не думаю, что вам следует разделять на ‘,’. Служба геолокации Google API возвращает не только адрес, Но и область, регион и т. Д. Кроме того, вы должны использовать Google Maps API для вычисления расстояния между запрашиваемой школой и другими школами: developers.google.com/maps/documentation/javascript /…
3. @Bonatoc — Важно, чтобы я полагался на предоставленную здесь базу данных, поскольку она имеет дальнейшее применение в приложении.
4. Если вам интересно, почему я предлагаю вам полностью полагаться на Google Maps API DistanceMatrix, это потому, что школа может находиться на границе сектора и может иметь школу поблизости в соседнем секторе, поэтому поиск в том же секторе бесполезен. Все зависит от того, что вы подразумеваете под «поблизости».
5. @Namit — Тем не менее, вы могли бы хранить больше данных из Google Maps в своей таблице SQL, асинхронно запрашивать расстояния в Google и сохранять их в своей БД.
Ответ №1:
Похоже, вам просто нужно проверить наличие начальной и конечной запятой:
REGEX "(^|, )(Sector-1|Sector 1|Sector- 1|Old Faridabad|...)(,|$)"