2013-11-08 1 views
0

Environment Подробности (XAMPP) Apache/2.4.4 (Win32) OpenSSL/1.0.1e PHP/5.5.3 Версия сервера: 5.6.11 - MySQL Community ServerПочему запрос mysql LIKE иногда не возвращает результаты?

У меня есть панель поиска, чтобы искать новые пользователей, с которыми у меня нет никаких отношений. Когда я добавляю параметры поиска, я иногда получаю результаты и иногда не получаю результатов.

Почему происходит следующее:

Поиск: "Sarah T" возвращает информацию о пользователе Sarah АСМАП

В то время как поиск: "Sarah Test" ничего не возвращает.

Я использую trim() и str_replace() для удаления белых символов. т.е. «Сары ах» становятся «Сара»

В базе данных:

firstname | lastname 
Sarah  | Testname 
Robert | Richards 

Используя следующую хранимую процедуру:

DROP PROCEDURE IF EXISTS `get_contact_list_new`// 

CREATE DEFINER=`root`@`localhost` PROCEDURE `get_contact_list_new`(
    IN _id  bigint(20), 
    IN _args  varchar(255) 
) 
BEGIN 
    IF _args IS NULL THEN 
     SELECT u.* FROM user_user_relationship AS uur 
     RIGHT JOIN user AS u 
     ON uur.user_id_one = _id AND u.user_id = uur.user_id_two 
     WHERE u.user_id != _id AND uur.status IS NULL; 
    ELSE 
     SET @args = CONCAT("%",_args,"%"); 
     SELECT u.* FROM user_user_relationship AS uur 
     RIGHT JOIN user AS u 
     ON uur.user_id_one = _id AND u.user_id = uur.user_id_two 
     WHERE u.user_id != _id AND uur.status IS NULL AND 
     (u.firstname LIKE @args OR u.lastname LIKE @args OR (u.firstname + u.lastname) LIKE @args OR u.username LIKE @args OR u.email LIKE @args) ;  
    END IF; 
END// 

Soemtimes я могу добавить случайные символы в середине т.е. sarzqtes и Саре Имя теста возвращается.

Это ошибка с запросом MySQL Like Like? Или это мой запрос? Какой бы он ни был - не могли бы вы объяснить мне, почему?

Эти проблемы также возникали на консоли phpmyadmin mysql.

call get_contact_list_new(1,"saraht") 

возвращает информацию о Sarah АСМАП

call get_contact_list_new(1,"sarahtes") 

возвращает ничего.

ответ

1
(u.firstname + u.lastname) LIKE @args 

должно быть:

CONCAT(u.firstname, " ", u.lastname) LIKE @args 

+ является числовым дополнением, а не конкатенации. И вам нужно указать пробел между именем и фамилией, иначе вы получите SarahTestName, который не будет соответствовать %Sarah Testname%.

+0

Ха, я должен заметить, что, поскольку я использовал его для аргов. Имейте в виду, я думал, что это как-то иначе. Большое спасибо! – mcv

Смежные вопросы