在SQL中使用LIKE运算符时组合字段

时间:2012-03-22 15:19:59

标签: php mysql

好的,所以我从网页中检索fullname来过滤客户列表,我不确定哪个部分是名字或姓氏所以我需要运行类似下面的查询:

"SELECT sc.*, c.firstname, c.lastname,c.email FROM scoop_customer AS sc LEFT JOIN 
customer AS c ON sc.customer_id = c.customer_id WHERE c.firstname + ' ' + c.lastname 
LIKE '%".$fullname."%'"

但即使我多次尝试并且通常它应该从DB返回值,它似乎对我不起作用。你能告诉我我做错了吗?

5 个答案:

答案 0 :(得分:2)

尝试CONCAT

 WHERE concat(c.firstname, ' ', c.lastname) LIKE '%".$fullname."%'"

答案 1 :(得分:1)

使用CONCAT(c.firstname , ' ' , c.lastname )

答案 2 :(得分:1)

CONCAT对于这些操作会很好

请参阅mysql doc

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat

“SELECT sc。*,c.firstname,c.lastname,c.email FROM scoop_customer AS sc LEFT JOIN customer AS c ON sc.customer_id = c.customer_id WHERE CONCAT(c.firstname,'',c.lastname)LIKE'%“。mysql_real_escape_string($ fullname)。”%'“

答案 3 :(得分:1)

我打破全名到第一个和最后一个并做两个类似的检查并在每个开头摆脱Wildcard%。连接和开头的通配符将打破您在名称字段上可能具有的任何索引。

当然,如果您在表中只有几千个客户,那么索引编制将不会太多,但是当您进入100,000个时,您会感觉到它!

答案 4 :(得分:1)

假设你之前没有逃过它,我已经添加了mysql_real_escape_string 对于这个问题,诀窍是OR,但不是CONCAT

".... WHERE c.firstname LIKE '%".mysql_real_escape_string($fullname)."%'
         OR c.lastname  LIKE '%".mysql_real_escape_string($fullname)."%'"