Искать дублированные сходные значения (LIKE) в пластине базы данных MySQLi

я делаю синхронизацию данных о размещении внешней API и охраняю данные о каждом размещении и Вашей локализации. У меня есть пластина Towns, где я помещаю город или поселок, в которой находится каждое размещение, и связывая их. Случай состоит, в том, что обновив 10000 типов размещения, я понимаю, что не всегда приходит имя города того же способа, и мне удваиваются города таким образом: - Benalmádena - Benalmadena - Benalmádena-Малага - Бенальмадена-ма - Benalmadena-Малага

Случай состоит в том, что мне хотелось бы делать консультацию в эту пластину, где я достал значения, которые содержат другое значение. Это состоит, (WHERE ямс LIKE "%Benalmadena %") но равно как Benalmadena, в том, чтобы делать это со всеми значениями пластины искать эти совпадения.

Кто-то может говорить мне, как делать эту консультацию SQL?

И с другой стороны: есть какой-то способ, которого, реализовав поиски в пластине TOWNS, чтобы видеть, существует ли запись, не имелась бы в виду тильда? Я это решил реализовывая поиски LIKE

$town = $em->getRepository('App:Town')->createQueryBuilder('t')
->where('t.name like :name')
->setParameter('name', trim($twnN));
$town->getQuery()->getResult();

EDIT:

Структура моей пластины TOWNS - следующая:

Пойдите: int | ямс: string | lat: string | long: string

И структура моего trabla Accommodations: ID:int | ямс: string | town_id: int

Это какие-то из дублированных записей поля "ямса" моей пластины Towns:

  • Benalmádena
  • Benalmadena
  • Benalmádena-малага
  • Benalmádena-ma
  • Benalmadena-малага

То, что мне понравилось бы, состоит в том, чтобы пробегать каждую из записей этой пластины и искать записи, которые содержали бы этот string. Например, если я оказываюсь все записи вовлеченными в одну изменчивый $towns и делаю foreach SQL это было бы так:

$towns = $this->getAllTowns();
foreach($towns as $k => $t){
  $sql = "Select * FROM TOWN WHERE name like '%".$t->getName()."%'";
}

Из-за каждой записи, я получаю все записи, которые содержат это слово. Не, если это возможное с консультацией MySQLi.

Большое спасибо.

2
задан 07.11.2019, 15:25
1 ответ

В ответе в:

Вїhay какой-то способ, которого, реализовав одну bГєsqueda в таблице TOWNS, чтобы видеть, существует ли реестр, не имелась бы в виду тильда?

ты Мог бы использовать presentadores del juego de caracteres вместе с COLLATE

Пример:

SELECT *
FROM Towns
WHERE name LIKE _utf8'%Benalmádena%' COLLATE utf8_general_ci;

Demo


В ответе в:

я gustarГ, - чтобы делать консультацию в эту таблицу, где я достал стоимость, которая содержит другую стоимость. Это состоит, (WHERE ямс LIKE "%Benalmadena %") но равно как Benalmadena, в том, чтобы делать это со всей стоимостью таблицы искать эти совпадения.

PodГ-Схвати использовать EXISTS(), чтобы искать, если существует по крайней мере отличный реестр, если сам и с именем similiar.

Пример:

SELECT *
  FROM Towns AS T
  WHERE EXISTS (
    SELECT A.id 
    FROM Towns AS A
    WHERE A.id != T.id 
      AND A.name LIKE CONCAT('%', CONVERT(T.name USING utf8), '%')
    LIMIT 1
  );

Demo


Ссылок:

2
ответ дан 01.12.2019, 12:27
  • 1
    Большое спасибо @Marcos, это - точно то, что он искал. –  Argoitz 08.11.2019, 10:35