2011-08-31 52 views
29

我試圖從使用PHP的MySQL數據庫中搜索兩個字段。如何選擇兩列作爲一個?

例如

mysql_query(" 
    SELECT (first_name,last_name) As name 
    FROM people 
    WHERE (name LIKE '%" . $term . "%') 
"); 

我認爲這是使用代碼,但無濟於事。我已經完成了一段時間,但我不記得如何達到預期的結果。

回答

71

您在尋找CONCAT的功能。

mysql_query("SELECT CONCAT(first_name, last_name) As name FROM people WHERE (CONCAT(first_name, last_name) LIKE '%" . $term . "%')"); 

甚至...

mysql_query("SELECT CONCAT(first_name, ' ', last_name) As name FROM people WHERE (CONCAT(first_name, ' ', last_name) LIKE '%" . $term . "%')"); 

我無法解釋你這背後的原因(...但也許有人可以發表評論?),但你不能使用name別名來搜索這兩個字段,您必須再次明確CONCAT

+4

@Vache,你不能在where子句中使用別名,因爲where子句可以別名之前執行解決。如果你想使用別名,把它放在'having'子句中。這可能會影響查詢的運行時間,但是因爲您正在強制SQL在應用過濾器之前解析別名。 – Johan

+0

因此,如果我不使用'WHERE(名稱LIKE'%'。$ term。「'」)',但使用類似它不起作用時,它會起作用 – Bobby

+0

如果您想在過濾器,將該查詢重寫爲:'SELECT CONCAT(first_name,'',last_name)AS name FROM people HAVING name LIKE'Vache IAm'' – Johan

4
+1

我經常使用這兩個函數 - 如果* any *值爲空,則concat返回null - 偶爾會有用'concat(distance,'km')' - 但更多的時候比不是concat_ws更好,例如:'concat_ws('',first,middle,last)' – ErichBSchulz