0

为什么这不起作用?

    SELECT up.first_name, up.last_name
    FROM user_profiles up 
    WHERE u.activated = 1
    AND up.first_name LIKE '%" . $search_term . "%'
    OR up.last_name LIKE '%" . $search_term . "%'
    OR CONCAT(up.first_name, '%', up.last_name) LIKE '%" . $search_term . "%'
    GROUP BY up.last_name
    ORDER BY up.last_name ASC;

当用户输入joe我的自动完成返回joe smith。当用户输入smith我的自动完成返回joe smith

但是当用户输入joe smith我的自动完成时返回空白。

我希望该CONCAT行能够在用户输入first_name [中间任意数量的空格]的情况下返回结果last_name

我相信%适用于任意数量的字符,但不适用于任意数量的空格。任何想法如何修复我的代码?

谢谢!

4

1 回答 1

0

它不起作用,因为您正在寻找 a 中的文字%$search_term 以及名字和姓氏)

替换这一行:

OR CONCAT(up.first_name, '%', up.last_name) LIKE '%" . $search_term . "%'

用这条线:

OR ('".$search_term."'  REGEXP CONCAT(up.first_name,[[:blank:]],up.lastname) ) 

如果 first_name 和 last_name 不包含特殊的正则表达式字符$%^[]等,这将起作用。

看; http://dev.mysql.com/doc/refman/5.1/en/regexp.html
请注意,正则表达式不适用于多字节字符集,在匹配之前将其转换为 latin1。

OR (CONVERT('".$search_term."' USING LATIN1) 
   REGEXP CONVERT(CONCAT(up.first_name,[[:blank:]],up.lastname) USING LATIN1) ) 
于 2011-05-21T21:20:52.107 回答