Поиск по MySQL по нескольким словам.

104
03 января 2021, 07:40

Допустим в БД 2 колонки - name и sname (имя и фамилия). Если я пишу в поле поиска "Владислав", то он найдет все строки, в которых в колонке "имя" есть "Владислав". Поиск выполняется таким запросом:

$query = "SELECT * FROM clients WHERE name LIKE '%$q%' OR sname LIKE '%$q%'";

$q - в ней хранятся ключевые слова

В колонке sname есть "Безенсон" и если в поиск писать "Владислав Безенсон", то ничего таким способом не найдет. Как искать по нескольким ключевым словам в разных колонках?

Заранее спасибо!

Answer 1

Тут либо так

  $search = explode(" ", $str);
  foreach($search as $word){
      $sql[] = 'name LIKE %'.$word.'%';
      $sql[] = 'sname LIKE %'.$word.'%';
  }
  $sql = 'SELECT * FROM clients WHERE '.implode(" OR ", $sql);

либо регулярные выражения с помощью RLIKE (присущий только Mysql)

$search = str_replace(" ","|",$str);
$sql = 'SELECT * FROM clients WHERE name RLIKE "'.$search.'" OR sname RLIKE "'.$search.'"';
Answer 2
SELECT _field1_, _field2_ FROM _your_table_ WHERE 
MATCH (_field1_) AGAINST ('_text_' IN BOOLEAN MODE)
Answer 3

Надо, чтобы каждое слово запроса было параметром в sql запросе; передавать массив запрос в like in ( 'param1', ..... ).

READ ALSO
Удалить и посчитать дубли из массива php

Удалить и посчитать дубли из массива php

Можно удалить дубли из массива и параллельно записывать, сколько дублей было удалено в отдельный массив?

122
PHPStorm не видит базу MySQL

PHPStorm не видит базу MySQL

Через OpenServer запускаю PHPMyAdmin, создаю базу MySQL и таблицу, сохраняю

97
Получение определенных данных из бд

Получение определенных данных из бд

Мне нужно найти запись в бд, по двум полям id и name

127