У меня есть форма поиска, и я хотел бы выбрать похожие элементы из базы данных на основе искомого заголовка.
Сейчас пользуюсь SELECT * FROM movies WHERE title LIKE '%".$_SESSION['search']."%';
Но например кто-то ищет «Парк Юрского периода 2» или «Парк Юрского периода 2», но не «Парк Юрского периода 2».
Как я могу выбрать те фильмы, которые имеют некоторую разницу в символах по сравнению с искомым названием?
Ты ищешь Mysql полнотекстовый поиск. Вот руководство для начала.
По сути, вам нужно создать полнотекстовый индекс для полей, которые вы хотите найти, затем вы можете использовать запрос для поиска похожих значений:
MATCH (col1,col2,...) AGAINST (expr [search_modifier])
Могу взглянуть на использование soundex, просто обратите внимание на заявленные ограничения, и я не уверен в его производительности для большого набора данных.
https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_soundex
Я пробовал полнотекстовый поиск:
SELECT * FROM movies WHERE MATCH(title) AGAINST('%".$_SESSION['search']."%' IN NATURAL LANGUAGE MODE) > 1 ORDER BY title;
Я пытался переписать от 1 до 0,5 или меньше, чем 1, но был тот же результат.
Это дает результат, если он полностью содержит искомый заголовок.
Юрский дает юрский мир
но юрский ничего не дает