Найдите похожие имена столбцов, используя различие SYNTAX

Я работаю с базой данных примерно с 100 тыс. Записей и хочу найти все похожие имена в этой базе данных, которые я поместил в один столбец. Сейчас я использую soundex, но результаты нечеткие, и фильтрация этих нечетких результатов в моем php делает процесс с таким количеством классов и записей soundex в базе данных очень медленным, поэтому я надеюсь, что есть другой способ отфильтровать лучшие совпадения, чем soundex .

Мой запрос:

SELECT soundex(full_name) AS soundex, 
    full_name AS customer_name
FROM (SELECT CONCAT(cu.first_name,' ', cu.last_name) AS full_name
    FROM `customers` AS cu  
    WHERE cu.`status` = 1) a
ORDER BY soundex(full_name))

Поэтому я сравниваю все имена, которые я поместил в один столбец, и показываю их все, упорядоченные по soundex. Есть ли способ эффективно использовать DIFFERENCE(soundex, soundex), кроме перекрестного объединения всей таблицы и сравнения каждого имени друг с другом? Или есть хороший способ достаточно разобрать не очень похожие имена?

Вы используете MySQL? Или SQL Server? ваш код меня немного смущает

Ilyes 13.11.2018 15:27

@Sami Я использую таблицу MYSQL. Где мой код вас смущает? Так что я могу проверить, понятно ли это.

Eve Edomenko 13.11.2018 15:34

@EveEdomenko, поскольку вы использовали ссылку на документацию t-sql, может возникнуть путаница

Barry 13.11.2018 15:35

Обратные тики делают его похожим на код MySQL.

jarlh 13.11.2018 15:43

@Barray спасибо за ваш комментарий. Я использую MySQL. Я также отредактировал сообщение и удалил ссылку на документацию t-sql и надеюсь, что мой вопрос яснее.

Eve Edomenko 13.11.2018 15:47

Возможно, вы захотите включить первичный ключ этой таблицы. Тогда можно хотя бы избежать совпадения имен с самими собой.

LukStorms 13.11.2018 15:53

@LukStorms. Звучит неплохо для начала, но как первичный ключ позволяет избежать сопоставления всех имен друг с другом?

Eve Edomenko 13.11.2018 16:04

Идентификатор должен быть другим. F.e. ... FROM customer cu1 JOIN customer cu2 ON cu2.id <> cu1.id AND .... Не очень хорошо для производительности, потому что такие критерии в основном игнорируют индекс. Но вы поняли. Кстати, интересный старый SO пост здесь

LukStorms 13.11.2018 16:08

Спасибо, добавлю дополнение с id. Я не знаю, что расстояние levensthein в этом случае полезно, так как необходимо провести много сравнений, но я буду держать вас в курсе, когда найду решение, вычисление которого может занять не вечность.

Eve Edomenko 13.11.2018 16:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
9
59
1

Ответы 1

soundex для full_name может быть не лучшим способом нечеткого соответствия. Вы видели реализацию функции levenshtein. Если вы используете это, вы можете получить расстояние между двумя строками и использовать его для сортировки по лучшим совпадениям.

См. Следующий пример. Расстояние Левенштейна в T-SQL

Другие вопросы по теме