Как точнее искать пользователей с помощью sql?

0

У меня есть инструкция 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

Что здесь не так? Может ли кто-нибудь предложить мне лучший и быстрый алгоритм поиска людей? И спасибо заранее!

  • 0
    Напоминание: полнотекстовый поиск (MATCH AGAINST... ) странным образом работает с таблицами, насчитывающими менее нескольких сотен строк. Пожалуйста, отредактируйте свой вопрос, чтобы быть более точным в вашей проблеме.
Теги:
algorithm
mysqli
search

1 ответ

0
Лучший ответ

У меня нет 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/ для примера того, как выглядит инъекционная атака на практике. Посмотрите "заполнители", чтобы узнать, как сделать это лучше.

Что касается более быстрых алгоритмов, вам, вероятно, просто нужны индексы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню