2012-03-22 88 views
0

好吧,我正在從網頁檢索fullname來過濾客戶列表,我不確定哪部分是名字或姓氏,所以我需要運行類似下面的查詢:在SQL中使用LIKE運算符時合併字段

"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."%'" 

但它似乎沒有工作給我,即使我試了很多次,通常它應該已經從數據庫中返回值。你能告訴我我做錯了嗎?

+2

** WARNING **你的代碼也許容易受到SQL注入攻擊。 – 2012-03-22 15:20:55

+1

或者如果您搜索「%」且表格足夠大,則拒絕服務 – 2012-03-22 15:29:51

回答

1

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

2

嘗試CONCAT

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

CONCAT會爲這些操作

請參見mysql的文檔

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

「選擇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)。」 %'「

1

我會把全名分成第一個和最後一個,做兩個類似的檢查,並在每個開始時刪除通配符%。連接和通配符開始時會破壞名稱字段上的任何索引。

當然,如果您在表格中只有幾千名客戶,索引不會太多,但是當您進入100,000時,您會感覺到它!

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)."%'"