Ваш запрос MySQL может иметь несколько предложений OR
, ищущих каждое слово, разделенное пробелом, введенное пользователем. Например, пользовательский поиск для «Королев Камня» может быть представлен в SQL как SELECT * FROM songs WHERE artist_name LIKE "%Queens%" OR artist_name LIKE "Stoneage"
.
Однако это может быть нежелательно, поскольку LIKE
поиск, начинающийся с %
, неэффективен и может быть очень медленным в большой базе данных.
Хотя я не могу говорить о влиянии на производительность, вам следует взглянуть на полнотекстовый поиск на естественном языке . Возможно, это наиболее эффективное решение, которое вы найдете:
SELECT * FROM songs WHERE MATCH(track_name, artist_name, album_name) AGAINST('Queens of the Stoneage' IN NATURAL LANGUAGE MODE);
Некоторые функции PHP существуют для определения сходства строк текста, но хранение этой работы в базе данных, вероятно, будет наиболее эффективным (и менее расстраивающим):