为什么这不起作用?
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
行能够在用户输入 [中间任意数量的空格] last_name
first_name
时返回结果。
我相信%
适用于任意数量的字符,但不适用于任何数量的空格。任何想法如何修复我的代码?
谢谢!
不起作用,因为您正在寻找$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) )