Если что-то используется только в тестах, оно должно быть полностью опущено. Это можно сделать с помощью атрибута #[cfg(test)]
.
То, что Вы имеете, должно работать, но может быть уменьшено до:
select * from table where concat_ws(' ',first_name,last_name)
like '%$search_term%';
можно ли обеспечить имя в качестве примера и критерий поиска, где это не работает?
SELECT *,concat_ws(' ',first_name,last_name) AS whole_name FROM users HAVING whole_name LIKE '%$search_term%'
..., вероятно, что Вы хотите.
Существует несколько вещей, которые могли помешать - Ваши данные являются чистыми?
могло случиться так, что у Вас есть пробелы в конце поля имени, которое тогда означает, что у Вас есть два пробелов между firstname и lastname когда Вы concat их? Используя обрезку (first_name) / обрезка (last_name) зафиксирует это - хотя реальная фиксация должна обновить Ваши данные.
Вы могли также это для соответствия, где два слова оба происходят, но не обязательно вместе (предполагающий, что Вы находитесь в php - который переменная $search_term предполагает, что Вы)
$whereclauses=array();
$terms = explode(' ', $search_term);
foreach ($terms as $term) {
$term = mysql_real_escape_string($term);
$whereclauses[] = "CONCAT(first_name, ' ', last_name) LIKE '%$term%'";
}
$sql = "select * from table where";
$sql .= implode(' and ', $whereclauses);