Как уже упоминалось Марком и другими, полнотекстовый поиск может быть лучше, если это возможно.
Однако вы можете разделить строку поиска по границе слова и использовать логику ИЛИ, но сначала проверьте всю строку, а затем предложите возможность расширить поиск:
ПРИМЕЧАНИЕ. Очистка и подготовка входных данных не показаны.
1 . Запрос с:
$sql_where = "WHERE name LIKE '%$ser%'";
2. Если возвращается ноль результатов, спросите пользователя, хотели бы они запросить каждое слово в отдельности.
3. Если пользователь запрашивает поиск по каждому слову, запросите с помощью:
$sql_where = get_sql_where($ser);
(рабочий) Пример кода ниже:
$ser = 'Testing 123';
$msg = '';
function get_sql_where($ser){
global $msg;
$sql_where = '';
$sql_where_or = '';
$ser = preg_replace("/[[:blank:]]+/"," ", trim($ser)); //replace consecutive spaces with single space
$search_words = explode(" ", $ser);
if($search_words[0] == ''){
$msg = 'Search quested was blank.';
}else{
$msg = 'Search results for any of the following words:' . implode(', ', $search_words);
$sql_where = "WHERE name LIKE '%$ser%'";
foreach($search_words as $word){
$sql_where_or .= " OR name LIKE '%$word%'";
}
}
return $sql_where . $sql_where_or;
}
$sql_where = get_sql_where($ser);
//Run query using $sql_where string