2011-05-21 50 views
0

爲什麼不能正常工作?MySQL - 在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

我相信%將適用於任何數量的字符,但不適用於任何數量的空格。任何想法如何解決我的代碼?

謝謝!

回答

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)) 
+0

thanks @johan - 不幸的是它不起作用,因爲單個/多個空格可能**在**'$ search_term'裏面 - 例如'John %%% Smith' - 您的行將允許**'$ search_term'之間的任何事情**,如'約翰史密斯%%%%%'或'%%%%%約翰史密斯' - 糾正我,如果我錯了! :) – pepe 2011-05-21 21:30:08

相關問題