MySQL - Relacionar 2 tablas

 
Vista:
sin imagen de perfil

Relacionar 2 tablas

Publicado por Pedro (2 intervenciones) el 15/03/2018 18:57:46
Hola
Tengo muy poca experiencia con Mysql y me estoy volviendo loco

Tengo una tabla (tabla1) que tiene nombres y fechas de nacimiento
nombre fecha_nac
Maria 1985-01-03 00:00:00
Juan 1960-04-07 00:00:00

Necesito una clausula Select elegante que me muestre lo siguiente:
nombre edad
Maria Treinta y tantos
Juan Cincuenta y muchos

Puedo crear un campo de texto y rellenar con PHP ese campo de texto, pero no es ni elegante ni dinámico y necesito que lo sea.

He creado una tabla (tabla2) que tiene años y su correspondiente texto
yearnum yeartext
34 Treinta y tantos
35 Treinta y tantos
58 Cincuenta y muchos

Ahora tengo que relacionar la edad en años, calculada desde fecha_nac a hoy, con yearnum, pero no doy con ello.

Alguna idea?
Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Relacionar 2 tablas

Publicado por Leonardo Josué (414 intervenciones) el 16/03/2018 15:51:25
Hola Pedro:

Tu problema se resume a cómo obtener la edad de la persona a partir de su fecha de nacimiento. Para esto, hay muchas formas de hacerlo con MySQL:

http://lmgtfy.com/?q=como+obtener+la+edad+en+mysql

En lo particular, una de las maneras más simples que me gusta emplear es con TIMESTAMPDIFF:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mysql> SELECT * FROM tabla;
+--------+---------------------+
| nombre | fecha_nac           |
+--------+---------------------+
| Maria  | 1985-01-03 00:00:00 |
| Juan   | 1960-04-07 00:00:00 |
| Leo    | 1977-12-21 00:00:00 |
+--------+---------------------+
3 rows in set (0.00 sec)
 
mysql> SELECT
    ->   nombre,
    ->   TIMESTAMPDIFF(YEAR, fecha_nac, CURDATE()) edad
    -> FROM tabla;
+--------+------+
| nombre | edad |
+--------+------+
| Maria  |   33 |
| Juan   |   57 |
| Leo    |   40 |
+--------+------+
3 rows in set (0.00 sec)

Una vez que tienes esto, simplemente haces un INNER JOIN a tu TABLA2 para obtener la descripción que quieres.

haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Relacionar 2 tablas

Publicado por Pedro (2 intervenciones) el 18/03/2018 10:02:50
Hola
Gracias, pero el problema era de sintaxis al preparar la consulta SELECT (soy novato y me lio con las comas, comillas, etc)

Estaba utilizando un cálculo de años que había encontrado
DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(`reservas`.`birth_date`)), '%Y')+0
aunque me gusta más tu propuesta de utilizar TIMESTAMPDIFF

Al final me ha quedado
(SELECT "N","Viaje","Nombre","Sexo","Edad") UNION (SELECT (@row:=@row+1) AS `rown`,`reservas`.`ref_viaje`,`reservas`.`first_name`,`reservas`.`sexo`,`edades`.`yearstxt` FROM `reservas` INNER JOIN `edades` ON TIMESTAMPDIFF(YEAR, `birth_date`, CURDATE())=`edades`.`yearsnum`, (SELECT @row:=0) R WHERE `reservas`.`pax` > 0 )

que funciona, aunque no se si es la mejor manera.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar