为什么这不起作用?
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
。
我相信%
适用于任意数量的字符,但不适用于任意数量的空格。任何想法如何修复我的代码?
谢谢!
答案 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) )