У меня есть инструкция sql, которая ищет пользователей и их имя пользователя. Вот код:
SELECT * FROM user_info WHERE username,name LIKE '$search%' and id!='$myId' OR MATCH (name,username) AGAINST ('$search' IN NATURAL LANGUAGE MODE) AND id!='$myId' LIMIT 10
Что здесь не так? Может ли кто-нибудь предложить мне лучший и быстрый алгоритм поиска людей? И спасибо заранее!
У меня нет MySQL для тестирования, но синтаксис foo,bar like '...'
выглядит не так. Вероятно, это должно быть разбито и превращено в OR.
После этого в SQL OR
имеет более низкий приоритет, чем AND
. Таким образом, A OR B AND C
самом деле означает A OR (B AND C)
. Поэтому ваше условие id не делает то, что вы, вероятно, хотите. Добавить круглые скобки.
Следующее, что сомнительно, - это то, как вы вставляете свой поиск и идентификатор в SQL. Просто вставляя вещи в строку, вы можете перейти к атакам SQL-инъекций, что является общей проблемой безопасности. См. Https://xkcd.com/327/ для примера того, как выглядит инъекционная атака на практике. Посмотрите "заполнители", чтобы узнать, как сделать это лучше.
Что касается более быстрых алгоритмов, вам, вероятно, просто нужны индексы.
(MATCH AGAINST...
) странным образом работает с таблицами, насчитывающими менее нескольких сотен строк. Пожалуйста, отредактируйте свой вопрос, чтобы быть более точным в вашей проблеме.