#mysql #search #innodb
#mysql #Поиск #innodb
Вопрос:
Я использую таблицы InnoDB, и мне нужно выполнить поиск внутри…
Допустим, у меня есть строка
1. asda
2. asdda
3. xyz
Я хочу выполнить поиск по asda…
Это было бы что-то вроде SELECT * FROM table WHERE myC LIKE 'asda'
… Что я хочу сделать, так это показать ‘asda’ и ‘asdda’, потому что это почти знакомо… Есть ли какой-либо эффективный способ сделать это? СОПОСТАВЛЕНИЕ (myC) С ‘asda’ доступно только в табличном типе MyISAM..
Спасибо за ответ!
Ответ №1:
Самой простой версией было бы использование функции SOUNDEX() в MySQL:
SELECT *
FROM table
WHERE SOUNDEX(myC) = SOUNDEX('asda');
или вы можете попробовать использовать расстояние Левенштейна, что было бы немного более надежным, но в вычислительном отношении намного дороже.
Комментарии:
1. Теоретически это работает… но я пробовал
... (UPPER(CONCAT_WS(' ', a.c1, a.c2, a.c3, c.cx, l.cy )) SOUNDS LIKE '%PODSTAVEK%' ...
, и он возвращает 0 строк… но при выполнении:... (UPPER(CONCAT_WS(' ', a.c1, a.c2, a.c3, c.cx, l.cy )) LIKE '%PODSTAVEK%' ...
он возвращает 12 строк… Что я могу сделать?2. Вы должны преобразовать обе части уравнения в коды soundex. Если вы выполняете только одну сторону, это ситуация с яблоками / апельсинами.
3. Нашел это! Спасибо за помощь 🙂