2010-04-20 109 views
1

嗨,我有以下代碼;PHP/mySQL - 使用'LIKE'子句中'CONCAT'和'AS'的結果

if(! empty($post['search-bar'])) { 
    $search_data = preg_replace("#\s\s#is", '', preg_replace("#[^\w\d\s+]#is", '', $post['search-bar'])); 
    $data_array = explode(" ", $search_data); 
    $data_array = "'%" . implode("%' OR '%", $data_array) . "%'"; 
    $query = " 
SELECT CONCAT(PROFILE_PROFFESION, FIRST_NAME, LAST_NAME, DISPLAY_NAME) AS 'STRING' 
FROM `" . ACCOUNT_TABLE . "` 
WHERE STRING LIKE (" . $data_array . ") 
    AND BUSINESS_POST_CODE LIKE '" . substr(P_BUSINESS_POST_CODE, 0, 4) . "%'"; 

    $q = mysql_query($query, $CON) or die("_error_" . mysql_error()); 
    if(mysql_num_rows($q) != 0) { 
     die(); 
    } 
} 

問題是,我想使用臨時山坳「STRING」在where子句中,而是返回「未知coloumn STRING任何一個都可以點我在正確的方向,至於菲爾

我已經打印出來查詢;

SELECT PROFILE_PROFFESION, FIRST_NAME, LAST_NAME, DISPLAY_NAME 
FROM nnn_accounts 
WHERE 
    CONCAT(PROFILE_PROFFESION, FIRST_NAME, LAST_NAME, DISPLAY_NAME) 
    LIKE ('%web%' OR '%design%') 
AND BUSINESS_POST_CODE LIKE 'NG19%' 

回答

1

裹STRING在'而不是'

應該是: ..AS `STRING`

然後任何地方,你指的字符串應該是`STRING`

編輯:下面這應該解決這個問題:

SELECT CONCAT(PROFILE_PROFFESION, FIRST_NAME, LAST_NAME, DISPLAY_NAME) AS `STRING` 
FROM `" . ACCOUNT_TABLE . "` 
WHERE BUSINESS_POST_CODE LIKE '" . substr(P_BUSINESS_POST_CODE, 0, 4) . "%'" 
HAVING `STRING` LIKE (" . $data_array . ") ; 
+0

仍然在'where子句'中收到未知列'STRING' – 2010-04-20 05:48:03

+1

嘗試使用''HAVING' STRING' LIKE(「)。 $ data_array。 「)(在WHERE子句 – 2010-04-20 05:50:24

+0

之後執行這個操作,謝謝你的輸入。因爲我的問題,我必須將你的標記標記爲正確的,但是和Shrapnel指示的一樣。我的問題是我沒有得到如何將'web'或'design'返回結果,但'網頁設計'不會返回結果 – 2010-04-20 06:22:47

1

是的,它看起來像你就不能使用在臨時山坳where子句 只是將其指定爲是:

WHERE CONCAT(PROFILE_PROFFESION, FIRST_NAME, LAST_NAME, DISPLAY_NAME) LIKE '%$data_array%') 
+0

我沒有得到任何錯誤,但沒有得到任何結果我打印了查詢; SELECT PROFILE_PROFFESION,FIRST_NAME,LAST_NAME,DISPLAY_NAME FROM'nnn_accounts' WHERE CONCAT(PROFILE_PROFFESION,FIRST_NAME,LAST_NAME,DISPLAY_NAME)LIKE('%web%'或'%design%')和BUSINESS_POST_CODE LIKE'NG19%' – 2010-04-20 06:07:57

+0

如果我輸入'web',我會得到結果。在'設計'我得到的結果,但'網頁設計'沒有結果。 – 2010-04-20 06:11:57

+0

你使用LIKE子句是荒謬的 – 2010-04-20 06:42:57

0

,這是更適合的語法是

SELECT CONCAT(PROFILE_PROFFESION, FIRST_NAME, LAST_NAME, DISPLAY_NAME) AS `STRING` FROM `tablename` WHERE BUSINESS_POST_CODE LIKE 'NG19%' HAVING `STRING` LIKE '%web%' OR `STRING` LIKE '%design%'