2011-08-31 67 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