环境详情(XAMPP) Apache / 2.4.4(Win32)OpenSSL / 1.0.1e PHP / 5.5.3 服务器版本:5.6.11 - MySQL社区服务器
我有一个搜索栏,用于搜索我与之无关的新用户。当我添加搜索参数时,我有时会得到结果,有时候得不到结果。
为什么会发生以下情况?
搜索:“Sarah T”返回用户Sarah Testname的信息
搜索时:“Sarah Test”不返回任何内容。
我使用trim()和str_replace()来删除白色字符。即“Sar a h”成为“Sarah”
在数据库中:
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,并返回Sarah Testname。
这是MySQL Like查询的错误吗?或者是我的查询?无论哪个 - 你能解释一下为什么吗?
这些问题也发生在phpmyadmin mysql控制台上。
call get_contact_list_new(1,"saraht")
返回有关Sarah Testname
的信息call get_contact_list_new(1,"sarahtes")
什么都不返回。
答案 0 :(得分:1)
(u.firstname + u.lastname) LIKE @args
应该是:
CONCAT(u.firstname, " ", u.lastname) LIKE @args
+
是数字加法,而不是字符串连接。你需要在名字和姓氏之间加一个空格,否则你会得到SarahTestName
,这与%Sarah Testname%
不匹配。