Используя mysql concat () в операторе Where?

Если что-то используется только в тестах, оно должно быть полностью опущено. Это можно сделать с помощью атрибута #[cfg(test)].

42
задан kevtrout 20 November 2008 в 23:02
поделиться

3 ответа

То, что Вы имеете, должно работать, но может быть уменьшено до:

select * from table where concat_ws(' ',first_name,last_name) 
like '%$search_term%';

можно ли обеспечить имя в качестве примера и критерий поиска, где это не работает?

83
ответ дан Robert Gamble 4 August 2019 в 19:20
поделиться
SELECT *,concat_ws(' ',first_name,last_name) AS whole_name FROM users HAVING whole_name LIKE '%$search_term%'

..., вероятно, что Вы хотите.

3
ответ дан Jack 4 August 2019 в 19:20
поделиться

Существует несколько вещей, которые могли помешать - Ваши данные являются чистыми?

могло случиться так, что у Вас есть пробелы в конце поля имени, которое тогда означает, что у Вас есть два пробелов между 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);
1
ответ дан benlumley 4 August 2019 в 19:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: