Подходящее предложение where в запросе mysql

#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|...)(,|$)"