Obtención de datos de tablas relacionadas en PHP
Hagamos una consulta que obtenga
todos los usuarios junto con sus ciudades. Para ello
necesitaremos el comando LEFT
JOIN:
Su sintaxis es la siguiente:
SELECT campos FROM nombre_tabla
LEFT JOIN nombre_tabla_relacionada ON condición_vinculación
WHERE condición_selección
Analicemos las partes individuales de la sintaxis de este comando.
Campos
Dado que la selección se realiza desde varias tablas,
seleccionar todos los campos mediante * no
funcionará. La siguiente consulta seleccionará campos solo
de la tabla principal, pero no de la relacionada:
SELECT *
Para que los datos se seleccionen de todas
las tablas, es necesario especificar el nombre
de la tabla antes de *:
SELECT users.*, cities.*
O bien, se pueden enumerar los campos que necesitamos indicando el nombre de la tabla antes de ellos:
SELECT users.name, cities.name
Estos dos métodos tienen un problema. El asunto es que si los campos en las tablas tienen nombres idénticos, en el array de PHP ocurrirá un conflicto de nombres y solo prevalecerá un campo, el segundo no estará presente.
Para resolver el problema, es necesario renombrar
los nombres conflictivos mediante el comando as:
SELECT users.name, cities.name as city_name
Vínculo
Después del comando ON debemos indicar
los campos de las dos tablas mediante los cuales se realiza
el vínculo. En nuestro caso, será el campo id
de la tabla de ciudades y el campo city_id
de la tabla de usuarios:
ON cities.id=users.city_id
Consulta
Finalmente, la consulta que obtendrá los usuarios junto con sus ciudades tendrá el siguiente aspecto:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Tareas prácticas
Supongamos que tienes una tabla con productos y una tabla con sus categorías. Escribe una consulta que obtenga los nombres de los productos junto con sus categorías.