⊗ppPmDOFR 385 of 447 menu

Relaciones de datos parentales en PHP

Supongamos que tenemos la tarea de almacenar padres e hijos. Supongamos que cada padre puede tener solo un hijo, y el hijo a su vez también puede tener un hijo.

Necesitamos pensar en cómo almacenaremos los datos. La primera idea que puede venir a la mente es crear dos tablas: parents para padres y sons para hijos. Luego relacionar estas tablas con algún campo: son_id o parent_id.

Sin embargo, esta idea no es muy buena, porque la misma persona puede ser simultáneamente padre e hijo, y tendríamos que almacenarlo en ambas tablas, lo cual es inconveniente, ocupa más espacio y fácilmente conduce a errores.

Una mejor opción es relacionar la tabla consigo misma: creemos una tabla users, en ella almacenaremos todos los usuarios y a cada uno le crearemos un campo son_id, en el cual se almacenará el id del hijo de esta misma tabla:

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

Consultas

Ahora escribamos una consulta que obtenga al usuario junto con su hijo.

Para empezar, simplemente obtengamos los usuarios:

SELECT * FROM users

Ahora hagamos un JOIN con sus hijos. Vamos a hacer un JOIN de la tabla consigo misma, por lo que necesitamos realizar un renombrado de la misma:

LEFT JOIN users as sons

Ahora podemos especificar la relación entre la tabla principal y la renombrada:

LEFT JOIN users as sons ON sons.id=users.son_id

Especifiquemos ahora los campos:

SELECT users.name as user_name, sons.name as son_name

Juntemos todo y obtendremos la siguiente consulta:

SELECT users.name as user_name, sons.name as son_name FROM users LEFT JOIN users as sons ON sons.id=users.son_id

Tareas prácticas

Supongamos que tenemos categorías. Cada categoría puede pertenecer a una categoría padre, que a su vez puede pertenecer a su propia categoría padre y así sucesivamente. Describa la estructura de almacenamiento.

Escriba una consulta que obtenga una categoría junto con su categoría padre.

Escriba una consulta que obtenga una categoría junto con su padre y su abuelo (categoría superior del padre).

Escriba una consulta que obtenga una categoría junto con su padre, su abuelo y su bisabuelo.

bydeenesfrptru