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

Consulta Mysql distinct

Estas en el tema de Consulta Mysql distinct en el foro de Mysql en Foros del Web. Hola... De antemano gracias por el tiempo. No se mucho sobre mysql pero necesito realizar una consulta donde se muestren las horas libres del doctor, ...
  #1 (permalink)  
Antiguo 13/06/2013, 12:08
 
Fecha de Ingreso: junio-2013
Mensajes: 14
Antigüedad: 10 años, 10 meses
Puntos: 0
Consulta Mysql distinct

Hola... De antemano gracias por el tiempo.
No se mucho sobre mysql pero necesito realizar una consulta donde se muestren las horas libres del doctor, que no se muestren las horas canceladas del doctor ni las agendadas, solo que las agendadas tienen id_doc y id_usuario, y me interesa que si el usuario ya tiene otra cita ya no muestre la hora ocupada.
Bueno lo que llevo es esto:

Código MySQL:
Ver original
  1. SELECT DISTINCT `horario`.`hora`, `agenda`.`id_usuario`
  2. FROM horario, agenda, hrscancel
  3. ((`horario`.`hora` <> (`agenda`.`hora`))
  4. AND (`horario`.`hora` <> `hrscancel`.`hora`)
  5. AND (`hrscancel`.`id_doc` = '$doctor')
  6. AND (`horario`.`dia` = '$dia')
  7. AND (`agenda`.`fecha` = '$date')
  8. AND (`horario`.`especialista` = '$doctor')
  9. AND (`agenda`.`id_doc` = '$doctor')
  10. AND (`hrscancel`.`fecha` = '$date'))

muchas gracias

Última edición por gnzsoloyo; 13/06/2013 a las 12:47 Razón: Mal etiquetado y formateado. Código de programacion no permitido.
  #2 (permalink)  
Antiguo 13/06/2013, 14:21
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta Mysql distinct

Hola mimis_grande20:

Comencemos desde el principio... La consulta que pones, ¿Funciona o marca error? ¿Si marca error, ¿qué error está marcando?... Si la consulta no marca error, pero no regresa los resultados que estás esperando, bueno, dinos qué es lo que regresa y qué es lo que debería regresar...

Es conveniente que antes que cualquier cosas postees la estructura de cada una de tus tablas y que nos pongas algunos datos de ejemplo, pasa así poder hacer pruebas... a partir de los datos de ejemplo, dinos qué es lo que necesitas de salida... igual y podemos indicarte una solución completamente distinta a lo que estás pensando.

Saludos
Leo.
  #3 (permalink)  
Antiguo 13/06/2013, 17:26
 
Fecha de Ingreso: junio-2013
Mensajes: 14
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Consulta Mysql distinct

Si bueno no marca error hasta el código que puse anteriormente me muestra las horas del horario del doctor seleccionado que corresponden a un día seleccionado pero necesito que no me muestre las horas de horario que coincidan con las horas que el usuario puede tener previamente agendadas con otro doctor porque si me las muestra....

No se si me de a entender sino díganmelo.

Gracias por el interés.
  #4 (permalink)  
Antiguo 13/06/2013, 17:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta Mysql distinct

Estas haciendo un producto cartesiano, porque no estableces cómo se relacionan las tablas. Es decir, las relaciones PK-FK
__________________
¿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 13/06/2013, 22:36
 
Fecha de Ingreso: junio-2013
Mensajes: 14
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Consulta Mysql distinct


este es el modelo logico, espero me puedan ayudar gracias..Lamento haberme tardado, pero soy nueva
  #6 (permalink)  
Antiguo 14/06/2013, 03:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta Mysql distinct

¿No podrías hacer simplemente un
Código MySQL:
Ver original
  1. SHOW CREATE TABLE usuarios;
  2. SHOW CREATE TABLE horario;
  3. SHOW CREATE TABLE hrscancel;
  4. SHOW CREATE TABLE agenda;
y mostrarnos eso?

El diagrama que pones apenas se puede leer. O lo pones más grande, o pones las sentencias de creación...

Haciendo un poco de esfuerzo, lo que se alcanza a percibir es que el modelo de datos no parece estar bien definido, porque le faltan relaciones necesarias para responder la consulta que quieres lograr.
Postea lo que te pido para poder avanzar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 14/06/2013, 07:18
 
Fecha de Ingreso: junio-2013
Mensajes: 14
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Consulta Mysql distinct

Este es el código de creación..
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `usuario` (
  2.     `nombre` CHAR(50) NOT NULL,
  3.     `apellido_paterno` CHAR(30) NOT NULL,
  4.     `apellido_materno` CHAR(30) NOT NULL,
  5.     `grupo` CHAR(8) NOT NULL,
  6.     `numcontrol` CHAR(10) NOT NULL,
  7.     `e_mail` CHAR(30) NOT NULL,
  8.     `tipo_usuario` CHAR(10) NOT NULL,
  9.     `password` CHAR(16) NOT NULL,
  10.     `sexo` CHAR(1) NOT NULL,
  11.     `colonia` CHAR(30) NOT NULL,
  12.     `calle` CHAR(30) NOT NULL,
  13.     `id_municipio` CHAR(4) NOT NULL,
  14.     PRIMARY KEY (`numcontrol`),
  15.     KEY `id_municipio` (`id_municipio`)
  16.  
  17. CREATE TABLE IF NOT EXISTS `agenda` (
  18.     `id_agenda` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  19.     `fecha` DATE NOT NULL,
  20.     `hora` CHAR(8) DEFAULT NULL,
  21.     `id_usuario` CHAR(10) DEFAULT NULL,
  22.     `id_doc` CHAR(10) DEFAULT NULL,
  23.     `estado` CHAR(15) NOT NULL,
  24.     PRIMARY KEY (`id_agenda`),
  25.     KEY `id_usuario` (`id_usuario`),
  26.     KEY `id_doc` (`id_doc`)
  27.  
  28. CREATE TABLE IF NOT EXISTS `horario` (
  29.     `especialista` CHAR(10) NOT NULL,
  30.     `hora` CHAR(8) NOT NULL,
  31.     `dia` CHAR(9) NOT NULL,
  32.     PRIMARY KEY (`especialista`,`hora`,`dia`),
  33.     KEY `especialista` (`especialista`)
  34.  
  35.  
  36. CREATE TABLE IF NOT EXISTS `hrscancel` (
  37.     `fecha` DATE NOT NULL,
  38.     `hora` CHAR(9) NOT NULL,
  39.     `id_agenda` INT(10) UNSIGNED DEFAULT NULL,
  40.     `id_doc` CHAR(10) NOT NULL,
  41.     PRIMARY KEY (`fecha`,`hora`),
  42.     KEY `id_agenda` (`id_agenda`),
  43.     KEY `id_doc` (`id_doc`)

Última edición por gnzsoloyo; 14/06/2013 a las 07:36 Razón: SQL sin etiquetar.
  #8 (permalink)  
Antiguo 15/06/2013, 11:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta Mysql distinct

Bueno, a primer análisis tienes al menos dos problemas: Por un lado las tablas no están correctamente relacionadas, y no hay modo de que con esa estructura y sin claves foráneas bien definidas (FK), se pueda hacer una consulta coherente o al menos eficiente.
Por otro lado, a mi parecer lo que tienes mal es el modelo general de datos y especialmente el análisis de las entidades y sus relaciones.
¿Por dónde quieres empezar?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 16/06/2013, 18:44
 
Fecha de Ingreso: junio-2013
Mensajes: 14
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Consulta Mysql distinct

Disculpame gnzsoloyo lamento esto lo que sucede es que la bd la exporte de phpMyadmin y no me di cuenta que las referencias las pone hasta la parte inferior hasta el momento que lo mencionaste... estas serian las referencias, dudo que estas esten mal puesto que me ayudo a elaborarlas una persona conocedora...

Código SQL:
Ver original
  1. Filtros para la tabla `horario`
  2. --
  3. ALTER TABLE `horario`
  4.   ADD CONSTRAINT `horario_ibfk_1` FOREIGN KEY (`especialista`) REFERENCES `usuario` (`numcontrol`) ON DELETE CASCADE ON UPDATE CASCADE;
  5.  
  6.  
  7.  
  8. --
  9. -- Filtros para la tabla `hrscancel`
  10. --
  11. ALTER TABLE `hrscancel`
  12.   ADD CONSTRAINT `hrscancel_ibfk_2` FOREIGN KEY (`id_agenda`) REFERENCES `agenda` (`id_agenda`) ON DELETE CASCADE ON UPDATE CASCADE,
  13.  
  14.   ADD CONSTRAINT `hrscancel_ibfk_3` FOREIGN KEY (`id_doc`) REFERENCES `usuario` (`numcontrol`) ON DELETE CASCADE ON UPDATE CASCADE;
  15.  
  16.  
  17.  
  18. Filtros para la tabla `usuario`
  19. --
  20. ALTER TABLE `usuario`
  21.   ADD CONSTRAINT `usuario_ibfk_1` FOREIGN KEY (`id_municipio`) REFERENCES `municipio` (`id_municipio`) ON DELETE CASCADE ON UPDATE CASCADE;
  22.  
  23.  
  24.  
  25.  Filtros para la tabla `agenda`
  26. --
  27. ALTER TABLE `agenda`
  28.   ADD CONSTRAINT `agenda_ibfk_1` FOREIGN KEY (`id_usuario`) REFERENCES `usuario` (`numcontrol`) ON DELETE CASCADE ON UPDATE CASCADE,
  29.  
  30.   ADD CONSTRAINT `agenda_ibfk_2` FOREIGN KEY (`id_doc`) REFERENCES `usuario` (`numcontrol`) ON DELETE CASCADE ON UPDATE CASCADE,
  31.  
  32.   ADD CONSTRAINT `Fk_agenda` FOREIGN KEY (`id_usuario`) REFERENCES `usuario` (`numcontrol`);

Etiquetas: php+bd+mysql
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 02:35.