0

環境の詳細 (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//

場合によっては、真ん中にランダムな文字を追加できます。つまり、sarzqtes と Sarah Testname が返されます。

これは MySQL Like クエリのバグですか? それとも私の質問ですか?どちらであっても - 理由を説明していただけますか?

これらの問題は、phpmyadmin mysql コンソールでも発生しました。

call get_contact_list_new(1,"saraht") 

Sarah Testname に関する情報を返します

call get_contact_list_new(1,"sarahtes")

何も返しません。

4

1 に答える 1

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

次のようにする必要があります。

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

+文字列の連結ではなく、数値の加算です。また、姓と名の間にスペースを入れる必要がありSarahTestNameます%Sarah Testname%

于 2013-11-08T18:07:30.400 に答える