MySQL - 在CONCAT中为“任意数量的空格”添加通配符?

时间:2011-05-21 21:14:27

标签: mysql wildcard concat

为什么这不起作用?

    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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

它不起作用,因为您在% (以及名字和姓氏)中寻找文字$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
请注意,regexp不适用于多字节字符集,在匹配之前将它们转换为latin1。

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