Mysql logo

Cualquier programador web se ha topado con este punto, en el cual un sitio web o aplicación requiere consultar varios datos mediante un campo que los relaciona, es por esto que detallare un pequeño tutorial:

Comenzamos con el desarrollo de la base de datos, algo bastante simple que sera un sistema de productos:

Tabla productos Mysql

Tabla Productos

En la tabla, el campo que indicara la relación sera tipo, de lo cuales podremos encontrar diversos tipos de productos o si lo prefieres, categorías de productos.

La tabla que almacenara los tipos sera la siguiente:

Tabla productos_tipo Mysql

Tabla productos_tipo

La 2da tabla la nombraremos productos_tipo, esto tiene un por qué, en mi caso prefiero agregarle un prefijo a las tablas que están relacionadas, esto permite que al trabajar con grandes cantidades de datos (tablas), están queden ordenadas una bajo de otra debido al orden alfabético que tienen, me explico:

Orden alfabético Mysql

Orden alfabético Mysql

Siguiendo con el llenado de la base de datos,  ingresaremos la siguiente información:

Datos tabla productos Mysql

Datos tabla productos

Y para la tabla productos_tipo, ingresaremos algo muy simple que serán líquidos y comestibles -varios:

Datos para la tabla productos_tipo Mysql

Datos para la tabla productos_tipo

Con los datos listos para comenzar, te darás cuenta que el campo tipo en la tabla productos es la encargada de hacer la relación con el id de la tabla productos_tipo, por ejemplo, todos los productos que sean del tipo 1, corresponderán a líquidos, de la misma manera se utilizara para el el tipo 2 y así sucesivamente.

A continuación realizaremos la siguiente consulta:  obtener todos los productos que sean del tipo liquido

mysql_query("SELECT a.id, a.precio, a.cantidad, b.titulo AS tipo FROM productos AS a LEFT JOIN productos_tipo AS b ON a.tipo = b.id WHERE a.tipo = '1'", $database);

Explicación de la consulta:

Este tipo de consultas es frecuentemente  difícil de recordar y trabajar por que a medida que aumenta la cantidad de campos y tablas se vuelve engorroso el proceso, esto se soluciona con el método de Alias que dispone Mysql, mediante la asignación de productos AS a,  diferenciaremos fácilmente cada dato que provenga de cualquier tabla, ejemplo:

mysql_query("SELECT a.* FROM productos AS a", $database);

Este es un alias simple, probablemente en algún momento hallas utilizado alias de campos (SELECT id AS cod_producto…) que si bien es útil, podemos hacer un uso más extensivo de esta funcionalidad.

Debido a que la tabla productos_tipo le asignamos un alias B, debemos hacer la relación de la misma manera en la Clausula ON, ejemplo

LEFT JOIN productos_tipo AS b ON a.tipo = b.id

Continuando con la consulta que habíamos realizado inicialmente esta nos devolverá los siguientes datos:

Resultados de productos de tipo liquido Mysql

Resultados de productos de tipo liquido

Como podemos ver el campo título de la tabla productos_tipo le asignamos un alias tipo, esto sera con fines de impresión para PHP,  un ejemplo podría ser un select box donde el usuario pueda seleccionar el tipo de una manera más legible y además ahorramos espacio y aumentamos la velocidad de nuestra base de datos.

Ahora complementaremos un poco más el ejemplo con la siguiente consulta: buscar aquellos productos que sean líquidos y ademas tengan una cantidad igual a 10

mysql_query("SELECT a.id, a.precio, a.cantidad, b.titulo AS tipo FROM productos AS a LEFT JOIN productos_tipo AS b ON a.tipo = b.id WHERE a.tipo = '1' AND a.cantidad = '10'", $database);
Resultados tipo liquido y cantidad 10 Mysql

Resultados tipo liquido y cantidad 10

Aquí puedes utilizar de la misma manera como se ha utilizado la clausula WHERE, simplemente debes tener cuidado con que el campo que estas buscando sea antecedido por el alias que asignaste a esa tabla, en este caso seria WHERE a.cantidad = ’10′.

Espero quede un poco más claro como llevar a cabo esta consulta, además de lo productivo que puede resultar el uso de Alias en Mysql.

Si tienes dudas o deseas aportar en algo no olvides dejar tu mensaje.