martes, 26 de noviembre de 2013

INNER JOIN EN PHP: Consulta Mysql para Unir Tablas Relacionadas

Supongamos que tenemos una Tabla Mysql llamada “Empresas” y otra tabla “Servicios”. Y nos interesa mostrar en pantalla los servicios que brinda cada empresa, considerando que cada fila de la tabla “Servicios” tiene un valor asociado a la empresa que pertenece.
Consulta Mysql INNER JOIN para unir tablas relacionadas
¿Cómo listar todas las empresas y sus servicios correspondiente?

Lo hacemos utilizando INNER JOIN mediante la siguiente Consulta Mysql:

"select Empresas.Nombre,Servicios.Servicio from Empresas inner join Servicios on Servicios.IdEmpresa=Empresas.Id";

Si quisiéramos listar todas las empresas, independientemente que tengan servicios o no, debemos utilizar la Consulta Mysql LEFT JOIN
¿Cómo se interpreta las tablas Mysql y consulta que hicimos arriba
Observemos que hay una columna llamada “IdEmpresa” en la tabla “Servicios” en donde se especifica el identificador de la empresa a la cual pertenece el servicio en cuestión. Por ejemplo, el servicio “Registro de dominios” tiene IdEmpresa=2, por lo tanto pertenece a la empresa Solo10.com.
Para comprender esta consulta mysql, te conviene leerla de la siguiente manera. Imaginemos que estamos conversando con el motor de base de datos mysql y le decimos:
  • Tráeme todas las filas de la tabla mysql llamada “Empresa” (ver línea número 2: “from Empresas”)
  • A cada fila, agrégale las columnas de la tabla mysql “Servicios” (únicamente las columnas de aquellas filas en donde IdEmpresa sea igual al Id de la empresa correspondiente a la fila actual en la tabla Empresas) (ver línea número 3: “inner join Servicios on Servicios.IdEmpresa=Empresas.Id”)
  • De todo ese conjunto de columnas, dame únicamente la columna “Nombre” de la tabla Mysql “Empresas” y “Servicio” de la tabla mysql “Servicios”. (ver línea número 1: select Empresas.Nombre,Servicios.Servicio)
Nuestro código fuente php quedaría completo de la siguiente manera:
// Conexión con la base de datos Mysql
 $conexion=mysql_connect('localhost','Tu-Usuario-Mysql','Contraseña-de-tu-Usuari-Mysql');
 mysql_select_db('Nombre-de-tu-Base-de-datos-Mysql',$conexion);
  
 //  Consulta Mysql donde aplicamos INNER JOIN
 $consulta_mysql="select Empresas.Nombre,Servicios.Servicio
                     from Empresas
                         inner join Servicios on Empresas.Id=Servicios.IdEmpresa";
 $resultado_consulta_mysql=mysql_query($consulta_mysql,$conexion);
  
 //  Navegamos cada fila que devuelve la consulta mysql y la imprimimos en pantalla
 while($fila=mysql_fetch_array($resultado_consulta_mysql)){
  echo "El servicio ".$fila['Servicio']." es ofrecido por la empresa ".$fila['Nombre'];
 }
Las últimas líneas del código, tal como hemos visto hace un tiempo, son para leer e imprimir en pantalla los resultados de una consulta Mysql.
Si te resultan complicadas estas extensas consultas mysql, seguramente podría interesarte comenzar a trabajar con el Framework PHP CodeIgniter. CodeIgniter permite hacer consultas mysql, por ejemplo el INNER JOIN, utilizando sentencias más compactas y comprensibles. Espero que este post te sea de utilidad y nos vemos pronto.

No hay comentarios:

Publicar un comentario