Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Problema con un ejercicio de MYSQL

Estas en el tema de Problema con un ejercicio de MYSQL en el foro de Mysql en Foros del Web. Hola a todos, Tengo que hacer un ejercicio que me esta dando problemas en mysql. Teniendo tres tablas: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original HOTEL ...
  #1 (permalink)  
Antiguo 03/11/2013, 04:56
 
Fecha de Ingreso: noviembre-2013
Ubicación: Barcelona
Mensajes: 33
Antigüedad: 11 años
Puntos: 0
Problema con un ejercicio de MYSQL

Hola a todos,

Tengo que hacer un ejercicio que me esta dando problemas en mysql.

Teniendo tres tablas:
Código SQL:
Ver original
  1. HOTEL (CodHot, nombre, direccion, ciudad, telefono, num_plazas, CodSuc)
  2. ON {CodSuc} REFERENCIA SUCURSAL (CodSuc)
  3.  
  4. TURISTA (CodTur, nombre, apellidos, direecion, telefono, CodSuc)
  5. ON {CodSuc} REFERENCIA SUCURSAL (CodSuc)
  6.  
  7. ALOJAMIENTO (CodTur, fecha_ini, CodHot, facha_salida, regimen)
  8. ON {CodTur} REFERENCIA TURISTA (CodTur)
  9. ON {CodHot} REFERENCIA HOTEL (CodHot)
El ejercicio dice que por cada por cada alojamiento contratado muestre los apellidos y nombres del turista en una columna seperada(ejemplo Sil Sil, Anotnio), nombre del hotel en mayusculas, fecha de inicio y el numero de dias que se ha alojado. Ordenado por nombre del hotel y despues por los apellidos.
Código MySQL:
Ver original
  1. select distinct t.CodTur, concat(t.cognoms,',',t.nom), UPPER(h.nom), a.data_ini, datediff (a.data_sortida,a.data_ini) as dies
  2. from turista t,allotjament a,hotel h
  3. where t.CodTur=a.CodTur
  4. order by h.nom, t.cognoms;

Mi problema viene en que se repite muchas veces:
Código MySQL:
Ver original
  1. +--------+-----------------------------+--------------------+------------+------
  2. +
  3. | CodTur | concat(t.cognoms,',',t.nom) | UPPER(h.nom) | data_ini | dies
  4. |
  5. +--------+-----------------------------+--------------------+------------+------
  6. +
  7. | 5 | Capdevila Sánchez,Laia | GRAN HOTEL | 2013-09-01 | 19
  8. |
  9. | 4 | Comas Garcia,Laia | GRAN HOTEL | 2013-09-01 | 1
  10. |
  11. | 4 | Comas Garcia,Laia | GRAN HOTEL | 2013-09-03 | 1
  12. |
  13. | 4 | Comas Garcia,Laia | GRAN HOTEL | 2013-09-05 | 1
  14. |
  15. | 4 | Comas Garcia,Laia | GRAN HOTEL | 2013-09-07 | 1
  16. |
  17. | 1 | Miralles Garcia,Albert | GRAN HOTEL | 2013-09-01 | 2
  18. |
  19. | 1 | Miralles Garcia,Albert | GRAN HOTEL | 2013-09-04 | 2
  20. |
  21. | 1 | Miralles Garcia,Albert | GRAN HOTEL | 2013-09-07 | 3
  22. |
  23. | 3 | Royo Royo,Josep Mª | GRAN HOTEL | 2013-09-01 | 3
  24. |
  25. | 3 | Royo Royo,Josep Mª | GRAN HOTEL | 2013-09-06 | 4
  26. |
  27. | 2 | Sánchez Pérez,Adrià | GRAN HOTEL | 2013-09-01 | 3
  28. |
  29. | 2 | Sánchez Pérez,Adrià | GRAN HOTEL | 2013-09-07 | 4
  30. |
  31. | 5 | Capdevila Sánchez,Laia | HOTEL DIAGONAL MAR | 2013-09-01 | 19
  32. |
  33. | 4 | Comas Garcia,Laia | HOTEL DIAGONAL MAR | 2013-09-01 | 1
  34. |
  35. | 4 | Comas Garcia,Laia | HOTEL DIAGONAL MAR | 2013-09-03 | 1

y continua todos los turistas aparecen como si hubiesen estado en todos los hotesles.

Cuando si voy a la tabla de alojamiento me encuntro con esto:

Código MySQL:
Ver original
  1. mysql> select * from allotjament;
  2. +--------+------------+--------+--------------+-------------------+
  3. | CodTur | data_ini | CodHot | data_sortida | regim |
  4. +--------+------------+--------+--------------+-------------------+
  5. | 1 | 2013-09-01 | 100 | 2013-09-03 | mitja pensió |
  6. | 1 | 2013-09-04 | 103 | 2013-09-06 | mitja pensió |
  7. | 1 | 2013-09-07 | 105 | 2013-09-10 | pensió complerta |
  8. | 2 | 2013-09-01 | 100 | 2013-09-04 | mitja pensió |
  9. | 2 | 2013-09-07 | 103 | 2013-09-11 | mitja pensió |
  10. | 3 | 2013-09-01 | 100 | 2013-09-04 | mitja pensió |
  11. | 3 | 2013-09-06 | 103 | 2013-09-10 | mitja pensió |
  12. | 4 | 2013-09-01 | 100 | 2013-09-02 | pensió complerta |
  13. | 4 | 2013-09-03 | 103 | 2013-09-04 | pensió complerta |
  14. | 4 | 2013-09-05 | 105 | 2013-09-06 | pensió complerta |
  15. | 4 | 2013-09-07 | 101 | 2013-09-08 | pensió complerta |
  16. | 5 | 2013-09-01 | 100 | 2013-09-20 | pensió complerta |
  17. +--------+------------+--------+--------------+-------------------+


Esta es la tabla entera de hotel
Código MySQL:
Ver original
  1. 12 rows in set (0.00 sec)
  2.  
  3. +--------+--------------------+---------------+---------------+-----------+-----
  4. -------+--------+
  5. | CodHot | nom | adreca | ciutat | telefon | num_
  6. places | CodSuc |
  7. +--------+--------------------+---------------+---------------+-----------+-----
  8. -------+--------+
  9. | 100 | Hotel Gran via | Gran Via | Barcelona | 931234567 |
  10. 120 | 100 |
  11. | 101 | Hotel Diagonal Mar | Diagonal | Barcelona | 932345678 |
  12. 100 | 100 |
  13. | 102 | Gran Hotel | C/ Mondragón | Barcelona | 933456789 |
  14. 90 | 100 |
  15. | 103 | Gran Hotel | C/ Llull | Girona | 934567890 |
  16. 60 | 101 |
  17. | 104 | Hoteles Hilken | C/ Llacuna | Girona | 935678901 |
  18. 30 | 101 |
  19. | 105 | Gran Hotel | C/ Bonavista | Castelldefels | 936789012 |
  20. 120 | 101 |
  21. +--------+--------------------+---------------+---------------+-----------+-----
  22. -------+--------+

A ver si alguien me puede ayudar gracias,

Última edición por gnzsoloyo; 03/11/2013 a las 07:21
  #2 (permalink)  
Antiguo 03/11/2013, 06:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Problema con un ejercicio de MYSQL

En este foro no está permitido resolver ejercicios, pero sí orientar. No entiendo para qué usas ese DISTINCT y tampoco por qué no usas INNER JOIN para unir las tablas relacionadas. El punto de partida es la tabla de alojamientos. Mira esto, lo pruebas y nos dices. Analiza cada línea de la SQL. Si funciona, pero no la entiendes, no habrás aprendido.

Código MySQL:
Ver original
  1.    CONCAT(t.cognoms, ', ',t.nom) nomturista,
  2.    UPPER(h.nom) hotel,
  3.    a.data_ini,
  4.    DATEDIFF (a.data_sortida, a.data_ini) dias
  5. FROM allontjament a
  6.  INNER JOIN turista t ON a.CodTur = t.CodTur
  7.  INNER JOIN hotel h ON a.CodHot = h.CodHot
  8. ORDER BY h.nom, nomturista

Última edición por jurena; 03/11/2013 a las 13:57
  #3 (permalink)  
Antiguo 03/11/2013, 08:06
 
Fecha de Ingreso: noviembre-2013
Ubicación: Barcelona
Mensajes: 33
Antigüedad: 11 años
Puntos: 0
Respuesta: Problema con un ejercicio de MYSQL

Muchas gracias Jurena,

El motivo de utilizar distinct era para que evitar que se repita los datos pero aun así.
Lo intente de todas las formas pero no hubo manera.

Sobre los ejercicios esta claro que no quiero que nadie me haga los ejercicicios, si quiesen que me los haga directamente pongo el enunciado, pero quiero hacerlos y saber como.

Muchas graicas de nuevo,
  #4 (permalink)  
Antiguo 03/11/2013, 12:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con un ejercicio de MYSQL

Cita:
El motivo de utilizar distinct era para que evitar que se repita los datos pero aun así.
Lo intente de todas las formas pero no hubo manera.
DISTINCT evita la repeticion de registros en una consulta, pero sólo es funcional si al menos uno de los campos devueltos entre dos registros dados tienen diferentes valores. Eso es lo que se denomina "distinto" en bases de datos.
Es decir, si tu consulta devuelve, por ejemplo, 20 columnas, y entre dos registros cualesquiera, 19 columnas tienen valores iguales entre si, y una única columna tiene diferentes valores, ese registro se considera diferente y por eso saldrá en el DISTINCT.

¿Se entiende el concepto?
Cada registro se considera como una unidad.
Cita:
Sobre los ejercicios esta claro que no quiero que nadie me haga los ejercicicios, si quiesen que me los haga directamente pongo el enunciado, pero quiero hacerlos y saber como.
La observación de @jurena apunta a aclararte algo que siempre se aclara en este contexto: Sólo ayudamos guiando, pero para eso nos tienen que mostrar cómo lo están intentando. Entonces podremos guiar y aconsejar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 09/11/2013, 07:06
 
Fecha de Ingreso: noviembre-2013
Ubicación: Barcelona
Mensajes: 33
Antigüedad: 11 años
Puntos: 0
Respuesta: Problema con un ejercicio de MYSQL

Muchas gracias por la explicacion gnzsoloyo.

Eso es lo que necesito tambien que se me diga el por que ocurre.

Creo que he dado con el foro correcto.

Muchisimas gracias.

Etiquetas: concat, order
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:52.