环境详细信息(XAMPP)
Apache / 2.4.4(Win32)OpenSSL / 1.0.1e PHP / 5.5.3
服务器版本:5.6.11-MySQL Community Server

我有一个搜索栏,用于搜索与之没有关系的新用户。当我添加搜索参数时,有时会得到结果,有时却不会得到结果。

为什么会发生以下情况?

搜索:“ Sarah T”返回有关用户Sarah Testname的信息

在搜索:“ Sarah测试”时,不返回任何内容。

我使用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//


有时,我可以在中间添加随机字符,即sarzqtes并返回Sarah Testname。

这是MySQL Like查询的错误吗?还是我的查询?不管是什么-您能向我解释原因吗?

这些问题也发生在phpmyadmin mysql控制台上。

call get_contact_list_new(1,"saraht")


返回有关Sarah Testname的信息

call get_contact_list_new(1,"sarahtes")


什么也不返回。

最佳答案

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


应该:

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


+是数字加法,不是字符串连接。并且您需要在名字和姓氏之间放置一个空格,否则您将得到SarahTestName,它与%Sarah Testname%不匹配。

09-27 23:29