MySQL: как реализаовать поиска по нескольким вхождениям?

Иван Терешенко
Иван Терешенко
  • Сообщений: 35
  • Последний визит: Вчера в 18:17

Добрый день. Как лучше реализовать поиск по нескольким вхождениям в связке PHP (PDO) + MySQL? Сейчас использую вариант

SELECT * FROM articles WHERE name LIKE "%опух%" AND name LIKE "%поч%"

для того, чтобы в поиск попали и статья «Диагностика опухолей почек» и «Лечение почечных злокачественных опухолей». Но тут возникает проблема в формировании prepared statements в PHP (PDO). Есть ли лучшее решение? Спасибо.

Редактировалось: 2 раза (Последний: 20 января 2025 в 22:49)
Андрей Живов
Андрей Живов
  • Сообщений: 16
  • Последний визит: 14 февраля 2025 в 23:39

А в чем проблема?

$sql = 'SELECT *  FROM articles  WHERE name LIKE ?  AND name LIKE ?'; $prep = $dbh->prepare($sql); $ret = $prep->execute(['%' . 'опух' . '%', '%' . 'поч' . '%']);
Редактировалось: 1 раз (Последний: 20 января 2025 в 22:50)
Егор Савельев
Егор Савельев
  • Сообщений: 19
  • Последний визит: 24 февраля 2025 в 14:13

Есть еще instr это однозначно быстрее like


Ну и fulltext индексы конечно, искать с некоторым языком запросов

p.s. если искать в строках базы приходится ограниченное количество слов (т.е. грубо говоря список слов определяется проектом, а не свободным вводом от пользователя) то можно заранее (при добавлении строк) построить свой собственный индекс, размещая факт наличия подстроки в строке boolean полем true/false или создав соответствующие таблицы (если наличие слов сильно разряжено — это эффективнее), где наличие записи — факт наличия слова.

Например у тебя искать нужно три слова: man, woman, child, соответственно создаешь три boolean колонки has_man, has_woman, has_child в той же таблице где анализируемая строка и заполняешь их триггером.

Или если тот же пример но через таблицы, то в искомой таблице у тебя должно быть primary key поле, и ты создаешь на каждое слово по таблице has_man, has_woman, has_child, с единственным полем id, в эти таблицы помещаешь запись с id из искомой таблицы, если в ее строке есть это слово… это так же можно делать триггером.

Авторизуйтесь, чтобы писать на форуме.

Заявка на услуги DST

Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.

Адрес

Ижевск, ул. Воткинское шоссе, д. 170 Е, Технопарк Нобель, офис 1117

8 495 1985800
Заказать звонок

Режим работы: Пн-Пт 10:00-19:00

info@dstglobal.ru

Задать вопрос по почте

Укажите ваше имя
Укажите ваше email
Укажите ваше телефон