У меня нет MySQL здесь для тестирования, но синтаксис foo,bar like '...'
выглядит неправильно.Это, вероятно, должно быть разбито и превращено в ИЛИ.
После этого в SQL OR
имеет более низкий приоритет, чем AND
.Таким образом, A OR B AND C
на самом деле означает A OR (B AND C)
.Поэтому ваше условие не делает то, что вы, вероятно, хотите.Добавьте скобки.
Следующее, что вызывает сомнения, это то, как вы вставляете свой поиск и идентификатор в SQL.Просто вставьте что-то в строку, и вы столкнетесь с атаками SQL-инъекций, что является распространенной проблемой безопасности.См. https://xkcd.com/327/ для примера того, как инъекционная атака выглядит на практике.Найдите «заполнители», чтобы узнать, как это сделать лучше.
Что касается более быстрых алгоритмов, вам, вероятно, просто нужны индексы.