2011-08-31 26 views
29

estoy tratando de buscar dos campos como uno de una base de datos MySQL con PHP.¿Cómo seleccionar dos columnas como una sola?

por ejemplo

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

pensé que este era el código para utilizar, pero fue en vano. Ha pasado un tiempo desde que hice esto y no recuerdo exactamente cómo lograr el resultado deseado.

Respuesta

71

Usted está buscando la función CONCAT.

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

o incluso ...

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

No podría explicar las razones detrás de esto (... pero tal vez alguien puede dejar un comentario?), Pero no se puede utilizar el name alias para buscar ambos campos, que tienen que explícitamente CONCAT nuevo.

+4

@Vache, no se puede utilizar un alias en una cláusula donde, debido a la cláusula where puede ejecutar antes de que el alias se resuelve. Si desea usar el alias, póngalo en una cláusula 'having'. Esto puede afectar el tiempo de ejecución de la consulta sin embargo debido a que están obligando a SQL para resolver el alias antes de aplicar el filtro. – Johan

+0

por lo que funciona si no lo hago usuario la 'DONDE (nombre como '%". $ Plazo. "'") ', Pero cuando se utiliza similares que no funciona. – Bobby

+0

Si desea utilizar el alias en una filtrar, reescribir la consulta a: 'SELECCIONAR CONCAT (first_name, '', last_name) AS name DE personas QUE TIENEN el nombre LIKE 'Vache IAm'' – Johan

4
+1

Uso ambos de forma regular - el concat devuelve nulo si * cualquier * valor es nulo - esto puede ser útil ocasionalmente 'concat (distancia, 'km')' - pero con más frecuencia que no concat_ws es mejor, por ejemplo: 'concat_ws ('', first, middle, last)' – ErichBSchulz

Cuestiones relacionadas